'<%= pkg.assets %>js/widgets/histogram.js'
'<%= pkg.assets %>js/widgets/word-cloud.js'
'<%= pkg.assets %>js/widgets/treemap.js'
+ '<%= pkg.assets %>js/graphics/pie-chart.js'
'<%= pkg.assets %>js/top-search.js'
'<%= pkg.assets %>js/sortable.js'
'<%= pkg.assets %>js/common/inputs.js'
'<%= pkg.assets %>js/widgets/histogram.js'
'<%= pkg.assets %>js/widgets/word-cloud.js'
'<%= pkg.assets %>js/widgets/treemap.js'
+ '<%= pkg.assets %>js/graphics/pie-chart.js'
'<%= pkg.assets %>js/top-search.js'
'<%= pkg.assets %>js/sortable.js'
'<%= pkg.assets %>js/common/inputs.js'
name: 'drilldown/app'
out: '<%= pkg.assets %>build/js/drilldown/app.js'
- dashboardFile: options:
- name: 'dashboard/file-app'
- out: '<%= pkg.assets %>build/js/dashboard/file-app.js'
-
dashboard: options:
name: 'dashboard/app'
out: '<%= pkg.assets %>build/js/dashboard/app.js'
- componentViewer: options:
- name: 'component-viewer/app'
- out: '<%= pkg.assets %>build/js/component-viewer/app.js'
+ sourceViewer: options:
+ name: 'source-viewer/app'
+ out: '<%= pkg.assets %>build/js/source-viewer/app.js'
design: options:
name: 'design/app'
'fail-fast': true
port: '<%= grunt.option("port") %>'
src: ['<%= pkg.sources %>js/tests/e2e/tests/<%= grunt.option("spec") %>-spec.js']
+ testfile:
+ options:
+ test: true
+ verbose: true
+ 'fail-fast': true
+ port: '<%= grunt.option("port") %>'
+ src: ['<%= grunt.option("file") %>']
uglify:
grunt.registerTask 'single',
['dev', 'express:test', 'casper:single']
+ grunt.registerTask 'testfile',
+ ['dev', 'express:test', 'casper:testfile']
+
# tasks used by Maven build (see pom.xml)
grunt.registerTask 'maven-build-skip-tests-true',
['build']
+++ /dev/null
-requirejs.config
- baseUrl: "#{baseUrl}/js"
-
- paths:
- 'backbone': 'third-party/backbone'
- 'backbone.marionette': 'third-party/backbone.marionette'
- 'handlebars': 'third-party/handlebars'
-
- shim:
- 'backbone.marionette':
- deps: ['backbone']
- exports: 'Marionette'
- 'backbone':
- exports: 'Backbone'
- 'handlebars':
- exports: 'Handlebars'
-
-
-requirejs [
- 'backbone.marionette'
- 'component-viewer/main'
-], (
- Marionette
- ComponentViewer
-) ->
-
- $ = jQuery
- API_ISSUE = "#{baseUrl}/api/issues/show"
- App = new Marionette.Application()
- el = $('#body')
-
-
- App.addRegions
- viewerRegion: '#component-viewer'
-
-
- App.resizeContainer = ->
- width = $(window).width()
- height = $(window).height()
- el.innerWidth(width).innerHeight(height)
-
-
- App.requestComponentViewer = (s, currentIssue) ->
- if s?
- settings = issues: false, coverage: false, duplications: false, scm: false, workspace: false
- s.split(',').forEach (d) -> settings[d] = true
- settings.issues = false if currentIssue?
- else settings = null
- unless App.componentViewer?
- @resizeContainer()
- $(window).on 'resize', => @resizeContainer()
- App.componentViewer = new ComponentViewer
- settings: settings
- elementToFit: el
- App.viewerRegion.show App.componentViewer
- App.componentViewer
-
-
- App.addInitializer ->
- # Define parameters
- paramsHash = location.hash.substr(1)
- params = {}
- paramsHash.split('&').forEach (d) ->
- t = d.split '='
- params[t[0]] = decodeURIComponent t[1]
-
- viewer = App.requestComponentViewer params.settings, params.currentIssue
- if params.component?
- loadIssue = (key) ->
- $.get API_ISSUE, key: key, (r) =>
- viewer.showIssues false, r.issue
-
- if params.line?
- viewer.sourceView.highlightedLine = params.line
- viewer.on 'sized', ->
- viewer.off 'sized'
- viewer.scrollToLine params.line
-
- if params.blocks?
- blocks = params.blocks.split(';').map (b) ->
- t = b.split ','
- from: +t[0], to: +t[1]
- viewer.on 'resetShowBlocks', ->
- viewer.off 'resetShowBlocks'
- viewer.sourceView.showBlocks = blocks
-
- viewer.open params.component
-
- viewer.on 'loaded', ->
- viewer.off 'loaded'
- if params.tab? && params.item? && params.period?
- viewer.headerView.enableBar(params.tab).done ->
- viewer.enablePeriod +params.period, params.item
- else if params.tab? && params.item?
- viewer.state.set activeHeaderTab: params.tab, activeHeaderItem: params.item
- viewer.headerView.render()
- else if params.tab? && params.period?
- viewer.headerView.enableBar(params.tab).done ->
- viewer.enablePeriod params.period
- else if params.tab? && params.currentIssue?
- loadIssue(params.currentIssue).done ->
- viewer.state.set activeHeaderTab: params.tab
- viewer.headerView.render()
- else if params.tab?
- viewer.state.set activeHeaderTab: params.tab
- viewer.headerView.render()
- viewer.showAllLines()
- else if params.currentIssue?
- loadIssue params.currentIssue
- else viewer.showAllLines()
-
-
-
- # Message bundles
- l10nXHR = window.requestMessages()
-
-
- $.when(l10nXHR).done ->
- # Start the application
- App.start()
+++ /dev/null
-requirejs.config
- baseUrl: "#{baseUrl}/js"
-
- paths:
- 'backbone': 'third-party/backbone'
- 'backbone.marionette': 'third-party/backbone.marionette'
- 'handlebars': 'third-party/handlebars'
-
- shim:
- 'backbone.marionette':
- deps: ['backbone']
- exports: 'Marionette'
- 'backbone':
- exports: 'Backbone'
- 'handlebars':
- exports: 'Handlebars'
-
-
-requirejs [
- 'backbone.marionette'
- 'component-viewer/main'
- 'drilldown/conf'
-], (
- Marionette
- ComponentViewer
- MetricConf
-) ->
-
- $ = jQuery
-
- App = new Marionette.Application()
- el = $('#accordion-panel')
-
-
- App.addRegions
- viewerRegion: '#accordion-panel'
-
-
- App.resizeContainer = ->
- width = $(window).width()
- height = $(window).height() - el.offset().top - $('#footer').height() - 10
- el.innerWidth(width).innerHeight(height)
-
-
- App.requestComponentViewer = ->
- unless App.componentViewer?
- @resizeContainer()
- $(window).on 'resize', => @resizeContainer()
- App.componentViewer = new ComponentViewer
- elementToFit: el
- App.viewerRegion.show App.componentViewer
- App.componentViewer
-
-
-
- App.addInitializer ->
- viewer = App.requestComponentViewer()
- if window.metric?
- metricConf = MetricConf[window.metric]
- if metricConf?
- activeHeaderTab = metricConf.tab
- activeHeaderItem = metricConf.item
- viewer.open window.fileKey
- viewer.on 'loaded', ->
- viewer.off 'loaded'
- if activeHeaderTab? && activeHeaderItem?
- viewer.state.set activeHeaderTab: activeHeaderTab, activeHeaderItem: activeHeaderItem
- viewer.headerView.render()
- else
- viewer.showAllLines()
-
-
- # Message bundles
- l10nXHR = window.requestMessages()
-
-
- $.when(l10nXHR).done ->
- # Start the application
- App.start()
+++ /dev/null
-requirejs.config
- baseUrl: "#{baseUrl}/js"
-
- paths:
- 'backbone': 'third-party/backbone'
- 'backbone.marionette': 'third-party/backbone.marionette'
- 'handlebars': 'third-party/handlebars'
-
- shim:
- 'backbone.marionette':
- deps: ['backbone']
- exports: 'Marionette'
- 'backbone':
- exports: 'Backbone'
- 'handlebars':
- exports: 'Handlebars'
-
-
-requirejs [
- 'backbone.marionette'
- 'component-viewer/main'
- 'drilldown/conf'
-], (
- Marionette
- ComponentViewer
- MetricConf
-) ->
-
- $ = jQuery
- App = new Marionette.Application()
- el = $('#accordion-panel')
-
-
- App.addRegions
- viewerRegion: '#accordion-panel'
-
-
- App.resizeContainer = ->
- height = Math.min 780, ($(window).height() - 20)
- el.innerHeight(height)
-
-
- App.requestComponentViewer = ->
- unless App.componentViewer?
- @resizeContainer()
- $(window).on 'resize', => @resizeContainer()
- App.componentViewer = new ComponentViewer
- elementToFit: el
- App.viewerRegion.show App.componentViewer
- App.componentViewer
-
-
- App.addInitializer ->
- # Define parameters
- drilldown = window.drilldown || {}
- activeHeaderTab = 'issues'
- activeHeaderItem = '.js-filter-unresolved-issues'
- if drilldown.metric?
- metricConf = MetricConf[drilldown.metric]
- if metricConf?
- activeHeaderTab = metricConf.tab
- activeHeaderItem = metricConf.item
- else
- activeHeaderTab = 'basic'
- activeHeaderItem = null
- else if drilldown.rule?
- activeHeaderTab = 'issues'
- activeHeaderItem = ".js-filter-rule[data-rule='#{drilldown.rule}']"
- else if drilldown.severity?
- activeHeaderTab = 'issues'
- activeHeaderItem = ".js-filter-#{drilldown.severity}-issues"
-
- # Add event listeners
- $('.js-drilldown-link').on 'click', (e) ->
- e.preventDefault()
- key = $(e.currentTarget).data 'key'
- viewer = App.requestComponentViewer()
-
- f = ->
- if drilldown.period?
- viewer.enablePeriod drilldown.period, activeHeaderItem
- else if activeHeaderItem?
- viewer.state.set activeHeaderTab: activeHeaderTab, activeHeaderItem: activeHeaderItem
- viewer.render()
- else viewer.showAllLines()
-
- viewer.open key
- viewer.on 'loaded', ->
- viewer.off 'loaded'
- if activeHeaderTab?
- viewer.headerView.enableBar(activeHeaderTab).done -> f()
- else f()
-
-
-
- # Message bundles
- l10nXHR = window.requestMessages()
-
-
- $.when(l10nXHR).done ->
- # Start the application
- App.start()
onRender: ->
+ @$el.attr 'data-key', @model.get('key')
resetIssue: (options, p) ->
data = $(e.currentTarget).serialize()
$.post API_ADD_MANUAL_ISSUE, data
.done (r) =>
+ r = JSON.parse(r) if typeof r == 'string'
+ console.log r
@addIssue r.issue.key
.fail (r) =>
@hideSpinner()
events: ->
_.extend super,
'click .js-close-component-viewer': 'closeComponentViewer'
- 'click .sym': 'highlightUsages'
'click .code-issue': 'selectIssue'
initialize: (options) ->
super
- @listenTo @, 'loaded', @onLoaded
@listenTo options.app.state, 'change:selectedIndex', @select
onLoaded: ->
- @bindScrollEvents()
+ super
@bindShortcuts()
if @baseIssue?
@scrollToLine @baseIssue.get 'line'
@addIssuesPerLineMeta @issues
+ renderIssues: ->
+ @issues.forEach @renderIssue, @
+
+
renderIssue: (issue) ->
issueView = new IssueView
el: '#issue-' + issue.get('key')
closeComponentViewer: ->
@options.app.controller.closeComponentViewer()
-
-
- highlightUsages: (e) ->
- highlighted = $(e.currentTarget).is '.highlighted'
- key = e.currentTarget.className.split(/\s+/)[0]
- @$('.sym.highlighted').removeClass 'highlighted'
- @$(".sym.#{key}").addClass 'highlighted' unless highlighted
-
--- /dev/null
+<div class="source-viewer-header-component">
+ {{#unless removed}}
+ {{#if projectName}}
+ <div class="source-viewer-header-component-project">
+ {{qualifierIcon 'TRK'}} <a href="{{dashboardUrl project}}">{{projectName}}</a>
+ {{#if subProjectName}}
+
+ {{qualifierIcon 'TRK'}} <a href="{{dashboardUrl subProject}}">{{subProjectName}}</a>
+ {{/if}}
+ </div>
+ {{/if}}
+
+ <div class="source-viewer-header-component-name">
+ {{qualifierIcon q}} {{default path longName}}
+
+ {{#if canMarkAsFavourite}}
+ <a class="js-favorite source-viewer-header-favorite"
+ title="{{#if fav}}{{t 'click_to_remove_from_favorites'}}{{else}}{{t 'click_to_add_to_favorites'}}{{/if}}">
+ <i class="{{#if fav}}icon-favorite{{else}}icon-not-favorite{{/if}}"></i>
+ </a>
+ {{/if}}
+ </div>
+ {{else}}
+ <div class="source-viewer-header-component-project removed">{{removedMessage}}</div>
+ {{/unless}}
+</div>
+
+{{#unless removed}}
+ <a class="js-actions source-viewer-header-actions icon-list" title="{{t 'component_viewer.more_actions'}}"></a>
+
+ <div class="source-viewer-header-measures">
+ {{#if isUnitTest}}
+ <div class="source-viewer-header-measure">
+ <span class="source-viewer-header-measure-value">{{measures.fTests}}</span>
+ <span class="source-viewer-header-measure-label">{{t 'metric.tests.name'}}</span>
+ </div>
+ {{/if}}
+
+ {{#unless isUnitTest}}
+ <div class="source-viewer-header-measure">
+ <span class="source-viewer-header-measure-value">{{default measures.fLines '–'}}</span>
+ <span class="source-viewer-header-measure-label">{{t 'metric.lines.name'}}</span>
+ </div>
+ {{/unless}}
+
+ {{#if measures.fSqaleRating}}
+ <div class="source-viewer-header-measure">
+ <span class="rating rating-{{measures.fSqaleRating}}"
+ {{#if measures.fSqaleDebtRatio}}title="{{t 'metric.sqale_debt_ratio.name'}}: {{measures.fSqaleDebtRatio}}"{{/if}}>
+ {{measures.fSqaleRating}}
+ </span>
+ </div>
+ {{/if}}
+
+ <div class="source-viewer-header-measure">
+ <span class="source-viewer-header-measure-value">{{default measures.fDebt '0'}}</span>
+ <span class="source-viewer-header-measure-label">{{t 'component_viewer.header.debt'}}</span>
+ </div>
+ {{#if measures.fIssues}}
+ <div class="source-viewer-header-measure">
+ <span class="source-viewer-header-measure-value">{{measures.fIssues}}</span>
+ <span class="source-viewer-header-measure-label">{{t 'metric.violations.name'}}</span>
+ </div>
+ {{/if}}
+
+ {{#inArray tabs 'coverage'}}
+ <div class="source-viewer-header-measure">
+ <span class="source-viewer-header-measure-value">{{default measures.fCoverage '–'}}</span>
+ <span class="source-viewer-header-measure-label">{{t 'metric.coverage.name'}}</span>
+ </div>
+ {{/inArray}}
+
+ {{#inArray tabs 'duplications'}}
+ <div class="source-viewer-header-measure">
+ <span class="source-viewer-header-measure-value">{{default measures.fDuplicationDensity '–'}}</span>
+ <span class="source-viewer-header-measure-label">{{t 'duplications'}}</span>
+ </div>
+ {{/inArray}}
+
+ </div>
+{{/unless}}
--- /dev/null
+<table class="source-viewer-measures">
+<tr>
+{{#unless isUnitTest}}
+ <td class="source-viewer-measures-section">
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.ncloc}}"
+ data-max="{{measures.lines}}"
+ data-size="70"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure measure-big" data-metric="ncloc">
+ <span class="measure-name">{{t 'metric.ncloc.name'}}</span>
+ <span class="measure-value">{{measures.ncloc}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="lines">
+ <span class="measure-name">{{t 'metric.lines.name'}}</span>
+ <span class="measure-value">{{measures.lines}}</span>
+ </div>
+ </div>
+ </div>
+
+ {{#any measures.generated_ncloc measures.generated_lines}}
+ <div class="measures">
+ <div class="measures-list">
+ {{#if measures.generated_ncloc}}
+ <div class="measure measure-one-line" data-metric="generated_ncloc">
+ <span class="measure-name">{{t 'metric.generated_ncloc.name'}}</span>
+ <span class="measure-value">{{measures.generated_ncloc}}</span>
+ </div>
+ {{/if}}
+ {{#if measures.generated_lines}}
+ <div class="measure measure-one-line" data-metric="generated_lines">
+ <span class="measure-name">{{t 'metric.generated_lines.name'}}</span>
+ <span class="measure-value">{{measures.generated_lines}}</span>
+ </div>
+ {{/if}}
+ </div>
+ </div>
+ {{/any}}
+
+ <div class="measures measures-duplex">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="classes">
+ <span class="measure-name">{{t 'metric.classes.name'}}</span>
+ <span class="measure-value">{{measures.classes}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="functions">
+ <span class="measure-name">{{t 'metric.functions.name'}}</span>
+ <span class="measure-value">{{measures.functions}}</span>
+ </div>
+ </div>
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="accessors">
+ <span class="measure-name">{{t 'metric.accessors.name'}}</span>
+ <span class="measure-value">{{measures.accessors}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="statements">
+ <span class="measure-name">{{t 'metric.statements.name'}}</span>
+ <span class="measure-value">{{measures.statements}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.comment_lines_density_raw}}"
+ data-max="100"
+ data-size="40"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure-container">
+ <div class="measure measure-one-line" data-metric="comment_lines_density">
+ <span class="measure-name">Comments</span>
+ <span class="measure-value">{{measures.comment_lines_density}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="comment_lines">
+ <span class="measure-name">{{t 'metric.comment_lines.name'}}</span>
+ <span class="measure-value">{{measures.comment_lines}}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="public_api">
+ <span class="measure-name">{{t 'metric.public_api.name'}}</span>
+ <span class="measure-value">{{measures.public_api}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="public_documented_api_density">
+ <span class="measure-name">{{t 'metric.public_documented_api_density.name'}}</span>
+ <span class="measure-value">{{measures.public_documented_api_density}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="public_undocumented_api">
+ <span class="measure-name">{{t 'metric.public_undocumented_api.name'}}</span>
+ <span class="measure-value">{{measures.public_undocumented_api}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="complexity">
+ <span class="measure-name">{{t 'metric.complexity.name'}}</span>
+ <span class="measure-value">{{measures.complexity}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="function_complexity">
+ <span class="measure-name">{{t 'metric.function_complexity.name'}}</span>
+ <span class="measure-value">{{measures.function_complexity}}</span>
+ </div>
+ </div>
+ </div>
+ </td>
+{{/unless}}
+
+<td class="source-viewer-measures-section">
+ {{#notNull measures.fDebt}}
+ <div class="measures">
+ {{#notNull measures.fSqaleRating}}
+ <div class="measures-chart" data-metric="sqale_rating">
+ <span class="rating rating-{{measures.sqale_rating}}">{{measures.sqale_rating}}</span>
+ </div>
+ {{/notNull}}
+ <div class="measures-list">
+ <div class="measure measure-big" data-metric="sqale_index">
+ <span class="measure-name">{{t 'metric.sqale_index.short_name'}}</span>
+ <span class="measure-value">{{measures.sqale_index}}</span>
+ </div>
+ </div>
+ </div>
+ {{/notNull}}
+ <div class="measures measures-duplex">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="violations">
+ <span class="measure-name">Issues</span>
+ <span class="measure-value">{{measures.violations}}</span>
+ </div>
+ </div>
+ {{#notNull measures.fSqaleDebtRatio}}
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="sqale_debt_ratio">
+ <span class="measure-name">{{t 'metric.sqale_debt_ratio.short_name'}}</span>
+ <span class="measure-value">{{measures.sqale_debt_ratio}}</span>
+ </div>
+ </div>
+ {{/notNull}}
+ </div>
+ {{#gt measures.fIssues 0}}
+ <div class="measures measures-duplex">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="blocker_violations">
+ <span class="measure-name">{{severityIcon 'BLOCKER'}} {{t 'severity.BLOCKER'}}</span>
+ <span class="measure-value">{{default measures.blocker_violations 0}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="critical_violations">
+ <span class="measure-name">{{severityIcon 'CRITICAL'}} {{t 'severity.CRITICAL'}}</span>
+ <span class="measure-value">{{default measures.critical_violations 0}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="major_violations">
+ <span class="measure-name">{{severityIcon 'MAJOR'}} {{t 'severity.MAJOR'}}</span>
+ <span class="measure-value">{{default measures.major_violations 0}}</span>
+ </div>
+ </div>
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="minor_violations">
+ <span class="measure-name">{{severityIcon 'MINOR'}} {{t 'severity.MINOR'}}</span>
+ <span class="measure-value">{{default measures.minor_violations 0}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="info_violations">
+ <span class="measure-name">{{severityIcon 'INFO'}} {{t 'severity.INFO'}}</span>
+ <span class="measure-value">{{default measures.info_violations 0}}</span>
+ </div>
+ </div>
+ </div>
+ {{/gt}}
+</td>
+
+{{#unless isUnitTest}}
+ <td class="source-viewer-measures-section">
+ {{#all measures.coverage measures.it_coverage}}
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-size="70"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure" data-metric="coverage">
+ <span class="measure-name">{{t 'metric.coverage.name'}}</span>
+ <span class="measure-value">{{measures.coverage}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.line_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-base-color="#d4333f"
+ data-size="40"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure" data-metric="line_coverage">
+ <span class="measure-name">{{t 'metric.line_coverage.name'}}</span>
+ <span class="measure-value">{{measures.line_coverage}}</span>
+ </div>
+ <div class="measure" data-metric="lines_to_cover">
+ <span class="measure-name">{{t 'metric.lines_to_cover.name'}}</span>
+ <span class="measure-value">{{measures.lines_to_cover}}</span>
+ </div>
+ <div class="measure" data-metric="uncovered_lines">
+ <span class="measure-name">{{t 'metric.uncovered_lines.name'}}</span>
+ <span class="measure-value">{{measures.uncovered_lines}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.branch_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-base-color="#d4333f"
+ data-size="40"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure" data-metric="branch_coverage">
+ <span class="measure-name">{{t 'metric.branch_coverage.name'}}</span>
+ <span class="measure-value">{{measures.branch_coverage}}</span>
+ </div>
+ <div class="measure" data-metric="conditions_to_cover">
+ <span class="measure-name">{{t 'metric.conditions_to_cover.name'}}</span>
+ <span class="measure-value">{{measures.conditions_to_cover}}</span>
+ </div>
+ <div class="measure" data-metric="uncovered_conditions">
+ <span class="measure-name">{{t 'metric.uncovered_conditions.name'}}</span>
+ <span class="measure-value">{{measures.uncovered_conditions}}</span>
+ </div>
+ </div>
+ </div>
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.it_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-size="70"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure" data-metric="it_coverage">
+ <span class="measure-name">{{t 'metric.coverage.name'}}</span>
+ <span class="measure-value">{{measures.it_coverage}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.it_line_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-base-color="#d4333f"
+ data-size="40"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure" data-metric="it_line_coverage">
+ <span class="measure-name">{{t 'metric.line_coverage.name'}}</span>
+ <span class="measure-value">{{measures.it_line_coverage}}</span>
+ </div>
+ <div class="measure" data-metric="it_lines_to_cover">
+ <span class="measure-name">{{t 'metric.lines_to_cover.name'}}</span>
+ <span class="measure-value">{{measures.it_lines_to_cover}}</span>
+ </div>
+ <div class="measure" data-metric="it_uncovered_lines">
+ <span class="measure-name">{{t 'metric.uncovered_lines.name'}}</span>
+ <span class="measure-value">{{measures.it_uncovered_lines}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.it_branch_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-base-color="#d4333f"
+ data-size="40"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure" data-metric="it_branch_coverage">
+ <span class="measure-name">{{t 'metric.branch_coverage.name'}}</span>
+ <span class="measure-value">{{measures.it_branch_coverage}}</span>
+ </div>
+ <div class="measure" data-metric="it_conditions_to_cover">
+ <span class="measure-name">{{t 'metric.conditions_to_cover.name'}}</span>
+ <span class="measure-value">{{measures.it_conditions_to_cover}}</span>
+ </div>
+ <div class="measure" data-metric="it_uncovered_conditions">
+ <span class="measure-name">{{t 'metric.uncovered_conditions.name'}}</span>
+ <span class="measure-value">{{measures.it_uncovered_conditions}}</span>
+ </div>
+ </div>
+ </div>
+ {{/all}}
+
+ {{#if measures.overall_coverage}}
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.overall_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-size="70"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure measure-big" data-metric="overall_coverage">
+ <span class="measure-name">{{t 'metric.coverage.name'}}</span>
+ <span class="measure-value">{{measures.overall_coverage}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.overall_line_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-base-color="#d4333f"
+ data-size="40"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure-container">
+ <div class="measure" data-metric="overall_line_coverage">
+ <span class="measure-name">{{t 'metric.line_coverage.name'}}</span>
+ <span class="measure-value">{{measures.overall_line_coverage}}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="overall_lines_to_cover">
+ <span class="measure-name">{{t 'metric.lines_to_cover.name'}}</span>
+ <span class="measure-value">{{measures.overall_lines_to_cover}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="overall_uncovered_lines">
+ <span class="measure-name">{{t 'metric.uncovered_lines.name'}}</span>
+ <span class="measure-value">{{measures.overall_uncovered_lines}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.overall_branch_coverage_raw}}"
+ data-max="100"
+ data-color="#85bb43"
+ data-base-color="#d4333f"
+ data-size="40"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure-container">
+ <div class="measure" data-metric="overall_branch_coverage">
+ <span class="measure-name">{{t 'metric.branch_coverage.name'}}</span>
+ <span class="measure-value">{{measures.overall_branch_coverage}}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="measures">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="overall_conditions_to_cover">
+ <span class="measure-name">{{t 'metric.conditions_to_cover.name'}}</span>
+ <span class="measure-value">{{measures.overall_conditions_to_cover}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="overall_uncovered_conditions">
+ <span class="measure-name">{{t 'metric.uncovered_conditions.name'}}</span>
+ <span class="measure-value">{{measures.overall_uncovered_conditions}}</span>
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ </td>
+{{/unless}}
+
+{{#if isUnitTest}}
+ <td class="source-viewer-measures-section">
+ <div class="measures">
+ <div class="measures-list">
+ <div class="measure measure-big" data-metric="tests">
+ <span class="measure-name">{{t 'metric.tests.name'}}</span>
+ <span class="measure-value">{{measures.tests}}</span>
+ </div>
+ {{#notNull measures.test_success_density}}
+ <div class="measure measure-one-line" data-metric="test_success_density">
+ <span class="measure-name">{{t 'metric.test_success_density.name'}}</span>
+ <span class="measure-value">{{measures.test_success_density}}</span>
+ </div>
+ {{/notNull}}
+ {{#notNull measures.test_failures}}
+ <div class="measure measure-one-line" data-metric="test_failures">
+ <span class="measure-name">{{t 'metric.test_failures.name'}}</span>
+ <span class="measure-value">{{measures.test_failures}}</span>
+ </div>
+ {{/notNull}}
+ {{#notNull measures.test_errors}}
+ <div class="measure measure-one-line" data-metric="test_errors">
+ <span class="measure-name">{{t 'metric.test_errors.name'}}</span>
+ <span class="measure-value">{{measures.test_errors}}</span>
+ </div>
+ {{/notNull}}
+ {{#notNull measures.skipped_tests}}
+ <div class="measure measure-one-line" data-metric="skipped_tests">
+ <span class="measure-name">{{t 'metric.skipped_tests.name'}}</span>
+ <span class="measure-value">{{measures.skipped_tests}}</span>
+ </div>
+ {{/notNull}}
+ {{#notNull measures.test_execution_time}}
+ <div class="measure measure-one-line" data-metric="test_execution_time">
+ <span class="measure-name">{{t 'metric.test_execution_time.name'}}</span>
+ <span class="measure-value">{{measures.test_execution_time}}</span>
+ </div>
+ {{/notNull}}
+ </div>
+ </div>
+
+ <div class="measures">
+ <table class="source-viewer-tests-list">
+ <tr>
+ <td class="source-viewer-test-status subtitle" colspan="3">
+ {{t 'component_viewer.measure_section.unit_tests'}}<br>
+ {{t 'component_viewer.tests.ordered_by'}}
+ <a class="js-sort-tests-by-duration {{#eq testSorting 'duration'}}active-link{{/eq}}">
+ {{t 'component_viewer.tests.duration'}}</a>
+ /
+ <a class="js-sort-tests-by-name {{#eq testSorting 'name'}}active-link{{/eq}}">
+ {{t 'component_viewer.tests.test_name'}}</a>
+ /
+ <a class="js-sort-tests-by-status {{#eq testSorting 'status'}}active-link{{/eq}}">
+ {{t 'component_viewer.tests.status'}}</a>
+ </td>
+ <td class="source-viewer-test-covered-lines subtitle">{{t 'component_viewer.covered_lines'}}</td>
+ </tr>
+ {{#each tests}}
+ <tr>
+ {{#eq status 'SKIPPED'}}
+ <td class="source-viewer-test-status subtitle">{{testStatusIcon status}}</td>
+ <td class="source-viewer-test-duration subtitle"></td>
+ <td class="source-viewer-test-name">{{name}}</td>
+ <td class="source-viewer-test-covered-lines subtitle"></td>
+ {{else}}
+ {{#ifTestData this}}
+ <td class="source-viewer-test-status subtitle">{{testStatusIcon status}}</td>
+ <td class="source-viewer-test-duration subtitle">{{durationInMs}}ms</td>
+ <td class="source-viewer-test-name"><a class="js-show-test" data-name="{{name}}">{{name}}</a></td>
+ <td class="source-viewer-test-covered-lines subtitle">{{coveredLines}}</td>
+ {{else}}
+ <td class="source-viewer-test-status subtitle">{{testStatusIcon status}}</td>
+ <td class="source-viewer-test-duration subtitle">{{durationInMs}}ms</td>
+ <td class="source-viewer-test-name">{{name}}</td>
+ {{/ifTestData}}
+ {{/eq}}
+ </tr>
+ {{/each}}
+ </table>
+ </div>
+ </td>
+
+ <td class="source-viewer-measures-section">
+ {{#if selectedTest}}
+ {{#notEq selectedTest.status 'ERROR'}}
+ {{#notEq selectedTest.status 'FAILURE'}}
+ <div class="bubble-popup-title">{{t 'component_viewer.transition.covers'}}</div>
+ {{#each coveredFiles}}
+ <div class="bubble-popup-section">
+ <a target="_blank" href="{{dashboardUrl key}}" title="{{longName}}">{{longName}}</a>
+ <span class="subtitle">{{tp 'component_viewer.x_lines_are_covered' coveredLines}}</span>
+ </div>
+ {{else}}
+ {{t 'none'}}
+ {{/each}}
+ {{/notEq}}
+ {{/notEq}}
+
+ {{#notEq selectedTest.status 'OK'}}
+ <div class="bubble-popup-title">{{t 'component_viewer.details'}}</div>
+ {{#if selectedTest.message}}
+ <pre>{{selectedTest.message}}</pre>
+ {{/if}}
+ <pre>{{selectedTest.stackTrace}}</pre>
+ {{/notEq}}
+ {{/if}}
+ </td>
+{{/if}}
+
+{{#unless isUnitTest}}
+ <td class="source-viewer-measures-section">
+ <div class="measures">
+ <div class="measures-chart">
+ <span class="js-pie-chart"
+ data-value="{{measures.duplicated_lines_density_raw}}"
+ data-max="100"
+ data-size="70"
+ data-color="#f3ca8e"></span>
+ </div>
+ <div class="measures-list">
+ <div class="measure measure-big" data-metric="duplicated_lines_density">
+ <span class="measure-name">Duplications</span>
+ <span class="measure-value">{{measures.duplicated_lines_density}}</span>
+ </div>
+ </div>
+ </div>
+ <div class="measures">
+ <div class="measures-list">
+ <div class="measure measure-one-line" data-metric="duplicated_blocks">
+ <span class="measure-name">{{t 'metric.duplicated_blocks.name'}}</span>
+ <span class="measure-value">{{measures.duplicated_blocks}}</span>
+ </div>
+ <div class="measure measure-one-line" data-metric="duplicated_lines">
+ <span class="measure-name">{{t 'metric.duplicated_lines.name'}}</span>
+ <span class="measure-value">{{measures.duplicated_lines}}</span>
+ </div>
+ </div>
+ </div>
+ </td>
+{{/unless}}
+</tr>
+</table>
+
+<div class="modal-foot">
+ <a class="overlay-popup-close" title="{{t 'close'}}">{{t 'close'}}</a>
+</div>
--- /dev/null
+<a class="js-measures">{{t 'component_viewer.show_measures'}}</a>
+
+<br>
+<br>
+
+<a class="js-new-window">{{t 'component_viewer.new_window'}}</a>
+<br>
+<a class="js-raw-source">{{t 'component_viewer.show_raw_source'}}</a>
+<div class="source-viewer-header"></div>
+
{{#if hasSourceBefore}}
<i class="spinner js-component-viewer-source-before"></i>
{{/if}}
<table class="source-table">
{{#each source}}
- <tr class="source-line {{#eq line 0}}{{#empty issues}}hidden{{/empty}}{{/eq}}">
+ <tr class="source-line {{#eq line 0}}{{#empty issues}}hidden{{/empty}}{{/eq}}" {{#if line}}data-line-number="{{line}}"{{/if}}>
<td class="source-meta source-line-number" {{#if line}}data-line-number="{{line}}"{{/if}}></td>
<td class="source-meta source-line-scm" {{#if line}}data-line-number="{{line}}"{{/if}}>
--- /dev/null
+requirejs.config({
+ baseUrl: baseUrl + '/js',
+ paths: {
+ 'backbone': 'third-party/backbone',
+ 'backbone.marionette': 'third-party/backbone.marionette',
+ 'handlebars': 'third-party/handlebars'
+ },
+ shim: {
+ 'backbone.marionette': {
+ deps: ['backbone'],
+ exports: 'Marionette'
+ },
+ 'backbone': {
+ exports: 'Backbone'
+ },
+ 'handlebars': {
+ exports: 'Handlebars'
+ }
+ }
+});
+
+requirejs([
+ 'backbone.marionette',
+ 'source-viewer/viewer',
+], function (Marionette, SourceViewer) {
+
+ var $ = jQuery,
+ App = new Marionette.Application();
+
+ App.addRegions({
+ viewerRegion: '#source-viewer'
+ });
+
+ App.addInitializer(function () {
+ $('.js-drilldown-link').on('click', function (e) {
+ e.preventDefault();
+ var key = $(e.currentTarget).data('key'),
+ uuid = $(e.currentTarget).data('uuid'),
+ viewer = new SourceViewer();
+ App.viewerRegion.show(viewer);
+ viewer.open(uuid, key);
+ if (typeof window.drilldown.period === 'number') {
+ viewer.on('loaded', function () {
+ viewer.filterLinesByPeriod(window.drilldown.period);
+ });
+ }
+ });
+ });
+
+ var l10nXHR = window.requestMessages();
+ l10nXHR.done(function () {
+ App.start();
+ });
+});
--- /dev/null
+(function ($) {
+
+ function trans (left, top) {
+ return 'translate(' + left + ', ' + top + ')';
+ }
+
+ var defaults = {
+ size: 40,
+ thickness: 8,
+ color: '#1f77b4',
+ baseColor: '#e6e6e6'
+ };
+
+ $.fn.pieChart = function () {
+ $(this).each(function () {
+ var data = [
+ $(this).data('value'),
+ $(this).data('max') - $(this).data('value')
+ ],
+ options = _.defaults($(this).data(), defaults),
+ radius = options.size / 2;
+
+ var container = d3.select(this),
+ svg = container.append('svg')
+ .attr('width', options.size)
+ .attr('height', options.size),
+ plot = svg.append('g')
+ .attr('transform', trans(radius, radius)),
+ arc = d3.svg.arc()
+ .innerRadius(radius - options.thickness)
+ .outerRadius(radius),
+ pie = d3.layout.pie()
+ .sort(null)
+ .value(function (d) {
+ return d;
+ }),
+ colors = function (i) {
+ return i === 0 ? options.color : options.baseColor;
+ },
+ sectors = plot.selectAll('path')
+ .data(pie(data));
+
+ sectors.enter()
+ .append('path')
+ .style('fill', function (d, i) {
+ return colors(i);
+ })
+ .attr('d', arc);
+ });
+ };
+
+})(window.jQuery);
--- /dev/null
+requirejs.config({
+ baseUrl: baseUrl + '/js',
+ paths: {
+ 'backbone': 'third-party/backbone',
+ 'backbone.marionette': 'third-party/backbone.marionette',
+ 'handlebars': 'third-party/handlebars'
+ },
+ shim: {
+ 'backbone.marionette': {
+ deps: ['backbone'],
+ exports: 'Marionette'
+ },
+ 'backbone': {
+ exports: 'Backbone'
+ },
+ 'handlebars': {
+ exports: 'Handlebars'
+ }
+ }
+});
+
+requirejs([
+ 'backbone.marionette',
+ 'source-viewer/viewer'
+
+], function (Marionette, SourceViewer) {
+
+ var App = new Marionette.Application();
+
+ App.addRegions({
+ viewerRegion: '#source-viewer'
+ });
+
+ App.addInitializer(function () {
+ var viewer = new SourceViewer();
+ App.viewerRegion.show(viewer);
+ viewer.open(window.file.uuid, window.file.key);
+ if (typeof window.file.line === 'number') {
+ viewer.on('loaded', function () {
+ viewer
+ .highlightLine(window.file.line)
+ .scrollToLine(window.file.line);
+ });
+ }
+ });
+
+ var l10nXHR = window.requestMessages();
+
+ l10nXHR.done(function () {
+ App.start();
+ });
+
+});
--- /dev/null
+define([
+ 'backbone.marionette',
+ 'templates/source-viewer',
+ 'source-viewer/more-actions',
+ 'source-viewer/measures-overlay'
+], function (Marionette, Templates, MoreActionsView, MeasuresOverlay) {
+
+ var $ = jQuery,
+ API_FAVORITE = baseUrl + '/api/favourites';
+
+ return Marionette.ItemView.extend({
+ template: Templates['source-viewer-header'],
+
+ events: function () {
+ return {
+ 'click .js-favorite': 'toggleFavorite',
+ 'click .js-actions': 'showMoreActions',
+ 'click .js-permalink': 'getPermalink'
+ };
+ },
+
+ toggleFavorite: function () {
+ var that = this;
+ if (this.model.get('fav')) {
+ $.ajax({
+ url: API_FAVORITE + '/' + this.model.get('key'),
+ type: 'DELETE'
+ }).done(function () {
+ that.model.set('fav', false);
+ that.render();
+ });
+ }
+ else {
+ $.ajax({
+ url: API_FAVORITE,
+ type: 'POST',
+ data: {
+ key: this.model.get('key')
+ }
+ }).done(function () {
+ that.model.set('fav', true);
+ that.render();
+ });
+ }
+ },
+
+ showMoreActions: function (e) {
+ e.stopPropagation();
+ $('body').click()
+ var view = new MoreActionsView({ parent: this });
+ view.render().$el.appendTo(this.$el);
+ },
+
+ getPermalink: function () {
+ //TODO Line permalink
+ var query = 'id=' + encodeURIComponent(this.model.get('key')),
+ windowParams = 'resizable=1,scrollbars=1,status=1';
+ window.open(baseUrl + '/component/index?' + query, this.model.get('name'), windowParams);
+ },
+
+ showRawSources: function () {
+ var url = baseUrl + '/api/sources/raw?key=' + encodeURIComponent(this.model.get('key')),
+ windowParams = 'resizable=1,scrollbars=1,status=1';
+ window.open(url, this.model.get('name'), windowParams);
+ },
+
+ showMeasures: function () {
+ var overlay = new MeasuresOverlay({ model: this.model });
+ overlay.show();
+ }
+ });
+
+});
--- /dev/null
+define([
+ 'common/overlay',
+ 'templates/source-viewer'
+], function (Overlay, Templates) {
+
+ var $ = jQuery,
+ SOURCE_METRIC_LIST = [
+ 'accessors',
+ 'classes',
+ 'functions',
+ 'statements',
+ 'ncloc',
+ 'lines',
+ 'generated_ncloc',
+ 'generated_lines',
+ 'complexity',
+ 'function_complexity',
+ 'comment_lines',
+ 'comment_lines_density',
+ 'public_api',
+ 'public_undocumented_api',
+ 'public_documented_api_density'
+ ],
+ COVERAGE_METRIC_LIST = [
+ 'coverage',
+ 'line_coverage',
+ 'lines_to_cover',
+ 'uncovered_lines',
+ 'branch_coverage',
+ 'conditions_to_cover',
+ 'uncovered_conditions',
+ 'it_coverage',
+ 'it_line_coverage',
+ 'it_lines_to_cover',
+ 'it_uncovered_lines',
+ 'it_branch_coverage',
+ 'it_conditions_to_cover',
+ 'it_uncovered_conditions',
+ 'overall_coverage',
+ 'overall_line_coverage',
+ 'overall_lines_to_cover',
+ 'overall_uncovered_lines',
+ 'overall_branch_coverage',
+ 'overall_conditions_to_cover',
+ 'overall_uncovered_conditions'
+ ],
+ ISSUES_METRIC_LIST = [
+ 'violations',
+ 'sqale_index',
+ 'sqale_debt_ratio',
+ 'sqale_rating',
+ 'blocker_violations',
+ 'critical_violations',
+ 'major_violations',
+ 'minor_violations',
+ 'info_violations'
+ ],
+ DUPLICATIONS_METRIC_LIST = [
+ 'duplicated_lines_density',
+ 'duplicated_blocks',
+ 'duplicated_lines'
+ ],
+
+ TESTS_METRIC_LIST = [
+ 'tests',
+ 'test_success_density',
+ 'test_failures',
+ 'test_errors',
+ 'skipped_tests',
+ 'test_execution_time'
+ ];
+
+
+ return Overlay.extend({
+ template: Templates['source-viewer-measures'],
+
+ events: function () {
+ return _.extend(Overlay.prototype.events.apply(this, arguments), {
+ 'click .js-sort-tests-by-duration': 'sortTestsByDuration',
+ 'click .js-sort-tests-by-name': 'sortTestsByName',
+ 'click .js-sort-tests-by-status': 'sortTestsByStatus',
+ 'click .js-show-test': 'showTest'
+ });
+ },
+
+ onRender: function () {
+ Overlay.prototype.onRender.apply(this, arguments);
+ this.$('.js-pie-chart').pieChart();
+ },
+
+ show: function () {
+ var that = this,
+ requests = [this.requestMeasures()];
+ if (this.model.get('isUnitTest')) {
+ requests.push(this.requestTests());
+ }
+ $.when.apply($, requests).done(function () {
+ that.render();
+ });
+ },
+
+ requestMeasures: function () {
+ var that = this,
+ p = window.process.addBackgroundProcess(),
+ url = baseUrl + '/api/resources',
+ options = {
+ resource: this.model.key(),
+ metrics: [].concat(
+ SOURCE_METRIC_LIST,
+ COVERAGE_METRIC_LIST,
+ ISSUES_METRIC_LIST,
+ DUPLICATIONS_METRIC_LIST,
+ TESTS_METRIC_LIST
+ ).join()
+ };
+ return $.get(url, options).done(function (data) {
+ var measuresList = data[0].msr || [],
+ measures = that.model.get('measures') || {};
+ measuresList.forEach(function (m) {
+ measures[m.key] = m.frmt_val || m.data;
+ measures[m.key + '_raw'] = m.val;
+ });
+ that.model.set({ measures: measures });
+ window.process.finishBackgroundProcess(p);
+ }).fail(function () {
+ window.process.failBackgroundProcess(p);
+ });
+ },
+
+ requestTests: function () {
+ var that = this,
+ url = baseUrl + '/api/tests/show',
+ options = { key: this.model.key() };
+ return $.get(url, options).done(function (data) {
+ that.model.set({ tests: data.tests });
+ that.sortTests('name');
+ that.testSorting = 'name';
+ });
+ },
+
+ sortTests: function (condition) {
+ var tests = this.model.get('tests');
+ if (_.isArray(tests)) {
+ this.model.set({ tests: _.sortBy(tests, condition) });
+ }
+ },
+
+ sortTestsByDuration: function () {
+ this.sortTests('durationInMs');
+ this.testSorting = 'duration';
+ this.render();
+ },
+
+ sortTestsByName: function () {
+ this.sortTests('name');
+ this.testSorting = 'name';
+ this.render();
+ },
+
+ sortTestsByStatus: function () {
+ this.sortTests('status');
+ this.testSorting = 'status';
+ this.render();
+ },
+
+ showTest: function (e) {
+ var that = this,
+ name = $(e.currentTarget).data('name'),
+ url = baseUrl + '/api/tests/covered_files',
+ options = {
+ key: this.model.key(),
+ test: name
+ };
+ return $.get(url, options).done(function (data) {
+ that.coveredFiles = data.files;
+ that.selectedTest = _.findWhere(that.model.get('tests'), { name: name });
+ that.render();
+ });
+ },
+
+ serializeData: function () {
+ return _.extend(Overlay.prototype.serializeData.apply(this, arguments), {
+ testSorting: this.testSorting,
+ selectedTest: this.selectedTest,
+ coveredFiles: this.coveredFiles || []
+ });
+ }
+ });
+
+});
--- /dev/null
+define([
+ 'backbone.marionette',
+ 'templates/source-viewer'
+], function (Marionette, Templates) {
+
+ var $ = jQuery;
+
+ return Marionette.ItemView.extend({
+ className: 'source-viewer-header-more-actions',
+ template: Templates['source-viewer-more-actions'],
+
+ events: {
+ 'click .js-measures': 'showMeasures',
+ 'click .js-new-window': 'openNewWindow',
+ 'click .js-raw-source': 'showRawSource'
+ },
+
+ onRender: function () {
+ var that = this;
+ $('body').on('click.component-viewer-more-actions', function () {
+ $('body').off('click.component-viewer-more-actions');
+ that.close();
+ });
+ },
+
+ showMeasures: function () {
+ this.options.parent.showMeasures();
+ },
+
+ openNewWindow: function () {
+ this.options.parent.getPermalink();
+ },
+
+ showRawSource: function () {
+ this.options.parent.showRawSources();
+ }
+ });
+
+});
getPermalink: function (e) {
e.preventDefault();
- var url = baseUrl + '/component/index#component=' +
+ var url = baseUrl + '/component/index?id=' +
(encodeURIComponent(this.model.key())) + '&line=' + this.options.line,
windowParams = 'resizable=1,scrollbars=1,status=1';
window.open(url, this.model.get('name'), windowParams);
'issue/models/issue',
'issue/collections/issues',
'issue/issue-view',
+ 'source-viewer/header',
'source-viewer/popups/scm-popup',
'source-viewer/popups/coverage-popup',
'source-viewer/popups/duplication-popup',
- 'source-viewer/popups/line-actions-popup'
+ 'source-viewer/popups/line-actions-popup',
+ 'common/handlebars-extensions'
],
function (Backbone,
Marionette,
Issue,
Issues,
IssueView,
+ HeaderView,
SCMPopupView,
CoveragePopupView,
DuplicationPopupView,
var $ = jQuery,
HIGHLIGHTED_ROW_CLASS = 'source-line-highlighted';
- return Marionette.ItemView.extend({
- className: 'source',
+ return Marionette.Layout.extend({
+ className: 'source-viewer',
template: Templates['source-viewer'],
ISSUES_LIMIT: 100,
LINES_LIMIT: 1000,
LINES_AROUND: 500,
+ regions: {
+ headerRegion: '.source-viewer-header'
+ },
+
ui: {
sourceBeforeSpinner: '.js-component-viewer-source-before',
sourceAfterSpinner: '.js-component-viewer-source-after'
events: function () {
return {
+ 'click .sym': 'highlightUsages',
'click .source-line-scm': 'showSCMPopup',
'click .source-line-covered': 'showCoveragePopup',
'click .source-line-partially-covered': 'showCoveragePopup',
'click .source-line-uncovered': 'showCoveragePopup',
'click .source-line-duplications': 'showDuplications',
'click .source-line-duplications-extra': 'showDuplicationPopup',
- 'click .source-line-number[data-line-number]': 'highlightLine'
+ 'click .source-line-number[data-line-number]': 'onLineNumberClick'
};
},
this.loadSourceBeforeThrottled = _.throttle(this.loadSourceBefore, 1000);
this.loadSourceAfterThrottled = _.throttle(this.loadSourceAfter, 1000);
this.scrollTimer = null;
+ this.listenTo(this, 'loaded', this.onLoaded);
+ },
+
+ renderHeader: function () {
+ this.headerRegion.show(new HeaderView({ model: this.model }));
},
onRender: function () {
+ this.renderHeader();
this.renderIssues();
+ if (this.model.has('filterLinesFunc')) {
+ this.filterLines(this.model.get('filterLinesFunc'));
+ }
},
onClose: function () {
this.issueViews = [];
},
+ onLoaded: function () {
+ this.bindScrollEvents();
+ },
+
open: function (id, key) {
var that = this,
finalize = function () {
options = { key: this.model.key() };
return $.get(url, options).done(function (data) {
that.model.set(data);
+ that.model.set({ isUnitTest: data.q === 'UTS' });
});
},
},
renderIssues: function () {
- this.issues.forEach(this.renderIssue, this);
+ this.$('.issue-list').addClass('hidden');
},
renderIssue: function (issue) {
- var issueView = new IssueView({
- el: '#issue-' + issue.get('key'),
- model: issue
- });
- this.issueViews.push(issueView);
- issueView.render();
+ // do nothing
},
addIssue: function (issue) {
var line = issue.get('line') || 0,
- code = this.$('.source-line-code[data-line-number=' + line + ']'),
- issueList = code.find('.issue-list');
- if (issueList.length === 0) {
- issueList = $('<div class="issue-list"></div>');
- code.append(issueList);
- code.addClass('has-issues');
+ code = this.$('.source-line-code[data-line-number=' + line + ']');
+ code.addClass('has-issues');
+ },
+
+ highlightUsages: function (e) {
+ var highlighted = $(e.currentTarget).is('.highlighted'),
+ key = e.currentTarget.className.split(/\s+/)[0];
+ this.$('.sym.highlighted').removeClass('highlighted');
+ if (!highlighted) {
+ this.$('.sym.' + key).addClass('highlighted');
}
- issueList.append('<div class="issue" id="issue-' + issue.id + '"></div>');
- this.renderIssue(issue);
},
showSCMPopup: function (e) {
popup.render();
},
- highlightLine: function (e) {
+ onLineNumberClick: function (e) {
var row = $(e.currentTarget).closest('.source-line'),
+ line = row.data('line-number'),
highlighted = row.is('.' + HIGHLIGHTED_ROW_CLASS);
- this.$('.' + HIGHLIGHTED_ROW_CLASS).removeClass(HIGHLIGHTED_ROW_CLASS);
if (!highlighted) {
- row.addClass(HIGHLIGHTED_ROW_CLASS);
+ this.highlightLine(line);
this.showLineActionsPopup(e);
+ } else {
+ this.removeHighlighting();
}
},
+ removeHighlighting: function () {
+ this.$('.' + HIGHLIGHTED_ROW_CLASS).removeClass(HIGHLIGHTED_ROW_CLASS);
+ },
+
+ highlightLine: function (line) {
+ var row = this.$('.source-line[data-line-number=' + line + ']');
+ this.removeHighlighting();
+ row.addClass(HIGHLIGHTED_ROW_CLASS);
+ return this;
+ },
+
bindScrollEvents: function () {
var that = this;
this.$el.scrollParent().on('scroll.source-viewer', function () {
}
},
+ scrollToLine: function (line) {
+ var row = this.$('.source-line[data-line-number=' + line + ']');
+ if (row.length > 0) {
+ var p = this.$el.scrollParent();
+ if (p.is(document)) {
+ p = $(window);
+ }
+ var pTopOffset = p.offset() != null ? p.offset().top : 0,
+ pHeight = p.height(),
+ goal = row.offset().top - pHeight / 3 - pTopOffset;
+ p.scrollTop(goal);
+ }
+ return this;
+ },
+
loadSourceBefore: function () {
this.unbindScrollEvents();
var that = this,
that.bindScrollEvents();
}
});
+ },
+
+ filterLines: function (func) {
+ var lines = this.model.get('source'),
+ $lines = this.$('.source-line');
+ this.model.set('filterLinesFunc', func);
+ lines.forEach(function (line, idx) {
+ var $line = $($lines[idx]);
+ $line.toggleClass('source-line-shadowed', !func(line));
+ });
+ },
+
+ filterLinesByPeriod: function (periodId) {
+ var periods = this.model.get('periods'),
+ period = _.find(periods, function (candidate) {
+ return candidate[0] === periodId;
+ });
+ if (period) {
+ var sinceDate = moment(period[2]).toDate();
+ this.filterLines(function (line) {
+ var scmDate = moment(line.scmDate).toDate();
+ return scmDate >= sinceDate;
+ });
+ }
}
});
exports.initMessages = function () {
// Dump log messages
casper.removeAllListeners('remote.message');
- if (casper.cli.get('verbose')) {
- casper.on('remote.message', function(message) {
- this.echo('Log: '+ message, 'LOG');
- });
- }
+ casper.on('remote.message', function(message) {
+ this.echo('Log: '+ message, 'LOG');
+ });
// Dump uncaught errors
casper.removeAllListeners('page.error');
- if (casper.verbose) {
- casper.on('page.error', function(msg) {
- this.echo('Error: ' + msg, 'ERROR');
- });
- }
+ casper.on('page.error', function(msg) {
+ this.echo('Error: ' + msg, 'ERROR');
+ });
};
exports.mockRequestFromFile = function (url, fileName, options) {
- console.log('mock request "' + url + '" from file "' + fs.workingDirectory + fs.separator + fileName + '"');
var response = fs.read(fileName);
return mockRequest(url, response, options);
};
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('Coverage Filters'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-coverage');
- casper.waitForSelector('.js-filter-lines-to-cover');
- })
-
- .then(function () {
- casper.click('.js-filter-lines-to-cover');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 142);
- test.assertElementCount('.source-line-uncovered', 50);
- test.assertElementCount('.source-line-partially-covered', 2);
- test.assertElementCount('.component-viewer-source .source-line', 369);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-uncovered-lines');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 18);
- test.assertElementCount('.source-line-uncovered', 50);
- test.assertElementCount('.source-line-partially-covered', 0);
- test.assertElementCount('.component-viewer-source .source-line', 136);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-branches-to-cover');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 19);
- test.assertElementCount('.source-line-uncovered', 3);
- test.assertElementCount('.source-line-partially-covered', 2);
- test.assertElementCount('.component-viewer-source .source-line', 33);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-uncovered-branches');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 4);
- test.assertElementCount('.source-line-uncovered', 3);
- test.assertElementCount('.source-line-partially-covered', 2);
- test.assertElementCount('.component-viewer-source .source-line', 13);
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Go From Coverage to Test File'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- lib.mockRequestFromFile('/api/tests/test_cases', 'test-cases.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-toggle-coverage');
- casper.waitForSelector('.source-line-covered', function () {
- casper.click('.source-line-covered');
- casper.waitForSelector('.bubble-popup', function () {
- test.assertSelectorContains('.bubble-popup', 'src/test/java/org/sonar/batch/issue/IssueCacheTest.java');
- test.assertSelectorContains('.bubble-popup', 'should_update_existing_issue');
- test.assertSelectorContains('.bubble-popup li[title="should_update_existing_issue"]', '293');
-
- lib.clearRequestMocks();
- lib.mockRequestFromFile('/api/components/app', 'tests/app.json');
- lib.mockRequestFromFile('/api/sources/show', 'tests/source.json');
- lib.mockRequestFromFile('/api/resources', 'tests/resources.json');
- lib.mockRequest('/api/coverage/show', '{}');
- lib.mockRequestFromFile('/api/tests/show', 'tests/tests.json');
- casper.click('.component-viewer-popup-test-file[data-key]');
-
- casper.waitForSelector('.js-unit-test', function () {
- test.assertElementCount('.js-unit-test', 2);
- });
- });
- });
- })
-
- .run(function () {
- test.done();
- });
-});
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer', 'Duplications');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('Filters'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/duplications/show', 'duplications.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-duplications');
- casper.waitForSelector('.source-line-duplicated', function () {
- test.assertExists('.js-filter-duplications.active');
- test.assertElementCount('.component-viewer-source .source-line', 39);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-duplications');
- test.assertElementCount('.component-viewer-source .source-line', 520);
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-
-
-casper.test.begin(testName('Cross-Project'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/duplications/show', 'cross-project-duplications.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-duplications');
- casper.waitForSelector('.js-filter-duplications', function () {
- casper.click('.js-filter-duplications');
- casper.waitForSelector('.source-line-duplicated', function () {
- casper.click('.source-line-duplicated');
- casper.waitForSelector('.bubble-popup', function () {
- test.assertSelectorContains('.bubble-popup', 'JavaScript');
- test.assertSelectorContains('.bubble-popup', 'JavaScript :: Sonar Plugin');
- test.assertExists('a[data-key="org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin:src/main/java/org/sonar/plugins/javascript/core/JavaScript.java"]');
- test.assertSelectorContains('.bubble-popup', 'src/main/java/org/sonar/plugins/javascript/core/JavaScript.java');
- test.assertSelectorContains('.bubble-popup', '455'); // Line from
- test.assertSelectorContains('.bubble-popup', '470'); // Line to
- });
- });
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('In Deleted Files'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/duplications/show', 'duplications-in-deleted-files.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-toggle-duplications');
- casper.waitForSelector('.source-line-duplicated', function () {
- test.assertExists('.js-duplications-in-deleted-files');
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('Mark as Favorite'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequest('/api/favourites', '{}', { type: 'POST' });
- lib.mockRequest('/api/favourites/*', '{}', { type: 'DELETE' });
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- test.assertExists('.js-favorite');
- test.assertExists('.icon-not-favorite');
- casper.click('.js-favorite');
- casper.waitForSelector('.icon-favorite', function () {
- test.assertExists('.icon-favorite');
- casper.click('.js-favorite');
- casper.waitForSelector('.icon-not-favorite', function () {
- test.assertExists('.icon-not-favorite');
- });
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Don\'t Show Favorite If Not Logged In'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app-not-logged-in.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- test.assertDoesntExist('.js-favorite');
- test.assertDoesntExist('.icon-favorite');
- test.assertDoesntExist('.icon-not-favorite');
- })
-
- .run(function () {
- test.done();
- });
-});
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer', 'Issues');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('Filters'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-issues');
- casper.waitForSelector('.js-filter-unresolved-issues');
- })
-
- .then(function () {
- casper.click('.js-filter-unresolved-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 6);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-open-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 1);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-fixed-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 11);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-false-positive-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 1);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-MAJOR-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 1);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-MINOR-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 1);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-INFO-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 4);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-rule[data-rule="common-java:DuplicatedBlocks"]');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 1);
- test.assertSelectorContains('.issue', '2 duplicated blocks of code.');
- });
- })
-
- .then(function () {
- casper.click('.js-filter-rule[data-rule="squid:S1192"]');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 1);
- test.assertSelectorContains('.issue', 'Define a constant instead of duplicating this literal');
- });
- })
-
- .then(function () {
- casper.click('.js-filter-rule[data-rule="squid:S1135"]');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 4);
- test.assertSelectorContains('.issue', 'Complete the task associated to this TODO comment');
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('On File Level'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-issues');
- casper.waitForSelector('.js-filter-unresolved-issues');
- })
-
- .then(function () {
- casper.click('.js-filter-unresolved-issues');
- casper.waitForSelector('.issue');
- })
-
- .then(function () {
- test.assertVisible('.component-viewer-source .source-line[data-line-number="0"]');
- test.assertExists('#issue-20002ec7-b647-44da-bdf5-4d9fbf4b7c58');
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Bulk Change Link Exists'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-issues');
- casper.waitForSelector('.js-filter-unresolved-issues');
- })
-
- .then(function () {
- test.assertExists('.js-issues-bulk-change');
- })
-
- .run(function () {
- test.done();
- });
-});
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('Lines Filters'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-basic');
- casper.waitForSelector('.js-filter-ncloc');
- })
-
- .then(function () {
- casper.click('.js-filter-ncloc');
- test.assertElementCount('.component-viewer-source .source-line', 451);
- })
-
- .then(function () {
- casper.click('.js-filter-ncloc');
- test.assertElementCount('.component-viewer-source .source-line', 520);
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Do Not Show Ncloc Filter If No Data'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources-without-ncloc-data.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-basic');
- casper.waitForSelector('[data-metric="ncloc"]');
- })
-
- .then(function () {
- test.assertDoesntExist('.js-filter-ncloc');
- })
-
- .run(function () {
- test.done();
- });
-});
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('Link to Raw'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.waitForSelector('.js-actions', function () {
- casper.click('.js-actions');
- casper.waitForSelector('.js-raw-source', function () {
- casper.click('.js-raw-source');
- });
- });
- })
-
- .then(function () {
- test.assertUrlMatch('org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java');
- })
-
- .run(function () {
- test.done();
- });
-});
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer', 'Select Tab by Metric');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('sqale_index'), function (test) {
- casper
- .start(lib.buildUrl('file-dashboard'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- casper.evaluate(function () {
- window.fileKey = 'some-key';
- window.metric = 'sqale_index';
- });
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.waitForSelector('.issue', function () {
- test.assertExists('.js-toggle-issues.active');
- test.assertExists('.component-viewer-header-expanded-bar.active');
- test.assertExists('.js-filter-unresolved-issues.active');
- test.assertElementCount('.component-viewer-source .source-line', 56);
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('minor_violations'), function (test) {
- casper
- .start(lib.buildUrl('file-dashboard'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- casper.evaluate(function () {
- window.fileKey = 'some-key';
- window.metric = 'minor_violations';
- });
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.waitForSelector('.issue', function () {
- test.assertExists('.js-toggle-issues.active');
- test.assertExists('.component-viewer-header-expanded-bar.active');
- test.assertExists('.js-filter-MINOR-issues.active');
- test.assertElementCount('.component-viewer-source .source-line', 11);
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('line_coverage'), function (test) {
- casper
- .start(lib.buildUrl('file-dashboard'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- casper.evaluate(function () {
- window.fileKey = 'some-key';
- window.metric = 'line_coverage';
- });
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.waitForSelector('.source-line-covered', function () {
- test.assertExists('.js-toggle-coverage.active');
- test.assertExists('.component-viewer-header-expanded-bar.active');
- test.assertExists('.js-filter-lines-to-cover.active');
- test.assertElementCount('.component-viewer-source .source-line', 369);
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('duplicated_lines'), function (test) {
- casper
- .start(lib.buildUrl('file-dashboard'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/duplications/show', 'duplications.json');
- casper.evaluate(function () {
- window.fileKey = 'some-key';
- window.metric = 'duplicated_lines';
- });
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.waitForSelector('.source-line-duplicated', function () {
- test.assertExists('.js-toggle-duplications.active');
- test.assertExists('.component-viewer-header-expanded-bar.active');
- test.assertExists('.js-filter-duplications.active');
- test.assertElementCount('.component-viewer-source .source-line', 39);
- });
- })
-
- .run(function () {
- test.done();
- });
-});
+++ /dev/null
-var lib = require('../lib'),
- testName = lib.testName('Component Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('component-viewer-spec');
-
-
-casper.test.begin(testName('Base'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
-
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line', function () {
- // Check header elements
- test.assertExists('.component-viewer-header');
- test.assertSelectorContains('.component-viewer-header-component-project', 'SonarQube');
- test.assertSelectorContains('.component-viewer-header-component-project', 'SonarQube :: Batch');
- test.assertSelectorContains('.component-viewer-header-component-name',
- 'src/main/java/org/sonar/batch/index/Cache.java');
- test.assertExists('.component-viewer-header-favorite');
- test.assertExists('.component-viewer-header-actions');
-
- // Check main measures
- test.assertSelectorContains('.js-header-tab-basic', '379');
- test.assertSelectorContains('.js-header-tab-issues', 'A');
- test.assertSelectorContains('.js-header-tab-issues', '3h 30min');
- test.assertSelectorContains('.js-header-tab-issues', '6');
- test.assertSelectorContains('.js-header-tab-coverage', '74.3%');
- test.assertExists('.js-header-tab-scm');
-
- // Check source
- test.assertElementCount('.component-viewer-source .source-line', 520);
- test.assertSelectorContains('.component-viewer-source', 'public class Cache');
-
- // Check workspace
- test.assertExists('.component-viewer-workspace');
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Decoration'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
-
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- lib.mockRequestFromFile('/api/duplications/show', 'duplications.json');
- lib.mockRequestFromFile('/api/sources/scm', 'scm.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- // Check issues decoration
- casper.click('.js-toggle-issues');
- casper.waitForSelector('.issue', function () {
- test.assertElementCount('.issue', 6);
- test.assertSelectorContains('.issue', '2 duplicated blocks of code.');
-
- casper.click('.js-toggle-issues');
- casper.waitWhileSelector('.issue', function () {
- test.assertDoesntExist('.issue');
- });
- });
- })
-
- .then(function () {
- // Check coverage decoration
- casper.click('.js-toggle-coverage');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 142);
- test.assertElementCount('.source-line-uncovered', 50);
- test.assertElementCount('.source-line-partially-covered', 2);
-
- casper.click('.js-toggle-coverage');
- casper.waitWhileSelector('.source-line-covered', function () {
- test.assertDoesntExist('.source-line-covered');
- });
- });
- })
-
- .then(function () {
- // Check duplications decoration
- casper.click('.js-toggle-duplications');
- casper.waitForSelector('.source-line-duplicated', function () {
- test.assertElementCount('.source-line-duplicated', 32);
-
- casper.click('.js-toggle-duplications');
- casper.waitWhileSelector('.source-line-duplicated', function () {
- test.assertDoesntExist('.source-line-duplicated');
- });
- });
- })
-
- .then(function () {
- // Check scm decoration
- casper.click('.js-toggle-scm');
- casper.waitForSelector('.source-line-scm-inner', function () {
- test.assertElementCount('.source-line-scm-inner', 182);
- test.assertExists('.source-line-scm-inner[data-author="simon.brandhof@gmail.com"]');
- test.assertExists('.source-line-scm-inner[data-author="julien.henry@sonarsource.com"]');
-
- casper.click('.js-toggle-scm');
- casper.waitWhileSelector('.source-line-scm-inner', function () {
- test.assertDoesntExist('.source-line-scm-inner');
- });
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Header'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
-
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- lib.mockRequestFromFile('/api/duplications/show', 'duplications.json');
- lib.mockRequestFromFile('/api/sources/scm', 'scm.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- // Check issues header and filters
- casper.click('.js-header-tab-issues');
- casper.waitForSelector('.js-filter-unresolved-issues', function () {
- test.assertExists('.js-filter-open-issues');
- test.assertExists('.js-filter-fixed-issues');
- test.assertExists('.js-filter-false-positive-issues');
- test.assertSelectorContains('.js-filter-MAJOR-issues', '1');
- test.assertSelectorContains('.js-filter-MINOR-issues', '1');
- test.assertSelectorContains('.js-filter-INFO-issues', '4');
- test.assertSelectorContains('.js-filter-rule[data-rule="common-java:DuplicatedBlocks"]', '1');
- test.assertSelectorContains('.js-filter-rule[data-rule="squid:S1192"]', '1');
- test.assertSelectorContains('.js-filter-rule[data-rule="squid:S1135"]', '4');
- test.assertExists('.js-issues-time-changes');
-
- casper.click('.js-header-tab-issues');
- casper.waitWhileSelector('.js-filter-unresolved-issues', function () {
- test.assertDoesntExist('.js-filter-open-issues');
- test.assertDoesntExist('.js-filter-MAJOR-issues');
- test.assertDoesntExist('.js-filter-rule');
- });
- });
- })
-
- .then(function () {
- // Check coverage header and filters
- casper.click('.js-header-tab-coverage');
- casper.waitForSelector('.js-filter-lines-to-cover', function () {
- test.assertExists('.js-filter-uncovered-lines');
- test.assertExists('.js-filter-branches-to-cover');
- test.assertExists('.js-filter-uncovered-branches');
- test.assertSelectorContains('[data-metric="coverage"]', '74.3%');
- test.assertSelectorContains('[data-metric="line_coverage"]', '74.2%');
- test.assertSelectorContains('[data-metric="lines_to_cover"]', '194');
- test.assertSelectorContains('[data-metric="uncovered_lines"]', '50');
- test.assertSelectorContains('[data-metric="branch_coverage"]', '75.0%');
- test.assertSelectorContains('[data-metric="conditions_to_cover"]', '16');
- test.assertSelectorContains('[data-metric="uncovered_conditions"]', '4');
- test.assertExists('.js-coverage-time-changes');
-
- casper.click('.js-header-tab-coverage');
- casper.waitWhileSelector('.js-filter-lines-to-cover', function () {
- test.assertDoesntExist('.js-filter-uncovered-lines');
- test.assertDoesntExist('[data-metric="coverage"]');
- test.assertDoesntExist('[data-metric="branch_coverage"]');
- });
- });
- })
-
- .then(function () {
- // Check duplications header and filters
- casper.click('.js-header-tab-duplications');
- casper.waitForSelector('.js-filter-duplications', function () {
- test.assertSelectorContains('[data-metric="duplicated_blocks"]', '2');
- test.assertSelectorContains('[data-metric="duplicated_lines"]', '30');
-
- casper.click('.js-header-tab-duplications');
- casper.waitWhileSelector('.js-filter-duplications', function () {
- test.assertDoesntExist('[data-metric="duplicated_blocks"]');
- test.assertDoesntExist('[data-metric="duplicated_lines"]');
- });
- });
- })
-
- .then(function () {
- // Check scm header and filters
- casper.click('.js-header-tab-scm');
- casper.waitForSelector('.js-filter-modified-lines', function () {
- test.assertExists('.js-scm-time-changes');
-
- casper.click('.js-header-tab-scm');
- casper.waitWhileSelector('.js-filter-modified-lines', function () {
- test.assertDoesntExist('.js-scm-time-changes');
- });
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Test File'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
-
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'tests/app.json');
- lib.mockRequestFromFile('/api/sources/show', 'tests/source.json');
- lib.mockRequestFromFile('/api/resources', 'tests/resources.json');
- lib.mockRequestFromFile('/api/tests/show', 'tests/tests.json');
- lib.mockRequestFromFile('/api/tests/covered_files', 'tests/covered-files.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- // Check coverage header and filters
- casper.click('.js-header-tab-tests');
- casper.waitForSelector('.js-unit-test', function () {
- test.assertSelectorContains('[data-metric="test_execution_time"]', '12');
- test.assertElementCount('.js-unit-test', 2);
- test.assertSelectorContains('.js-unit-test[data-name="should_return_i"]', 'should_return_i');
- test.assertSelectorContains('.js-unit-test[data-name="should_return_i"]', '5');
- test.assertSelectorContains('.js-unit-test[data-name="should_return_to_string"]', 'should_return_to_string');
- test.assertSelectorContains('.js-unit-test[data-name="should_return_to_string"]', '4');
-
- casper.click('.js-unit-test[data-name="should_return_to_string"]');
- casper.waitForSelector('.bubble-popup', function () {
- test.assertSelectorContains('.bubble-popup', 'Sample.java');
- test.assertSelectorContains('.bubble-popup', 'src/main/java/sample');
- });
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Go From Coverage to Test File'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- lib.mockRequestFromFile('/api/tests/test_cases', 'test-cases.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-toggle-coverage');
- casper.waitForSelector('.source-line-covered', function () {
- casper.click('.source-line-covered');
- casper.waitForSelector('.bubble-popup', function () {
- test.assertSelectorContains('.bubble-popup', 'src/test/java/org/sonar/batch/issue/IssueCacheTest.java');
- test.assertSelectorContains('.bubble-popup', 'should_update_existing_issue');
- test.assertSelectorContains('.bubble-popup li[title="should_update_existing_issue"]', '293');
-
- lib.clearRequestMocks();
- lib.mockRequestFromFile('/api/components/app', 'tests/app.json');
- lib.mockRequestFromFile('/api/sources/show', 'tests/source.json');
- lib.mockRequestFromFile('/api/resources', 'tests/resources.json');
- lib.mockRequest('/api/coverage/show', '{}');
- lib.mockRequestFromFile('/api/tests/show', 'tests/tests.json');
- casper.click('.component-viewer-popup-test-file[data-key]');
-
- casper.waitForSelector('.js-unit-test', function () {
- test.assertElementCount('.js-unit-test', 2);
- });
- });
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Coverage Filters'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-coverage');
- casper.waitForSelector('.js-filter-lines-to-cover');
- })
-
- .then(function () {
- casper.click('.js-filter-lines-to-cover');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 142);
- test.assertElementCount('.source-line-uncovered', 50);
- test.assertElementCount('.source-line-partially-covered', 2);
- test.assertElementCount('.component-viewer-source .source-line', 369);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-uncovered-lines');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 18);
- test.assertElementCount('.source-line-uncovered', 50);
- test.assertElementCount('.source-line-partially-covered', 0);
- test.assertElementCount('.component-viewer-source .source-line', 136);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-branches-to-cover');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 19);
- test.assertElementCount('.source-line-uncovered', 3);
- test.assertElementCount('.source-line-partially-covered', 2);
- test.assertElementCount('.component-viewer-source .source-line', 33);
- });
- })
-
- .then(function () {
- casper.click('.js-filter-uncovered-branches');
- casper.waitForSelector('.source-line-covered', function () {
- test.assertElementCount('.source-line-covered', 4);
- test.assertElementCount('.source-line-uncovered', 3);
- test.assertElementCount('.source-line-partially-covered', 2);
- test.assertElementCount('.component-viewer-source .source-line', 13);
- });
- })
-
- .run(function () {
- test.done();
- });
-});
-
-
-casper.test.begin(testName('Ability to Deselect Filters'), function (test) {
- casper
- .start(lib.buildUrl('component-viewer#component=component'), function () {
- lib.setDefaultViewport();
- lib.mockRequest('/api/l10n/index', '{}');
- lib.mockRequestFromFile('/api/components/app', 'app.json');
- lib.mockRequestFromFile('/api/sources/show', 'source.json');
- lib.mockRequestFromFile('/api/resources', 'resources.json');
- lib.mockRequestFromFile('/api/issues/search', 'issues.json');
- lib.mockRequestFromFile('/api/coverage/show', 'coverage.json');
- lib.mockRequestFromFile('/api/duplications/show', 'duplications.json');
- })
-
- .then(function () {
- casper.waitForSelector('.component-viewer-source .source-line');
- })
-
- .then(function () {
- casper.click('.js-header-tab-issues');
- var testFilter = '.js-filter-unresolved-issues';
- casper.waitForSelector(testFilter + '.active', function () {
- lib.waitForElementCount('.component-viewer-source .source-line', 56, function () {
- casper.click(testFilter);
- lib.waitForElementCount('.component-viewer-source .source-line', 520, function () {
- test.assertDoesntExist(testFilter + '.active');
- casper.click(testFilter);
- lib.waitForElementCount('.component-viewer-source .source-line', 56, function () {
- test.assertExists(testFilter + '.active');
- });
- });
- })
- });
- })
-
- .then(function () {
- casper.click('.js-header-tab-coverage');
- var testFilter = '.js-filter-lines-to-cover';
- casper.waitForSelector(testFilter + '.active', function () {
- lib.waitForElementCount('.component-viewer-source .source-line', 369, function () {
- casper.click(testFilter);
- lib.waitForElementCount('.component-viewer-source .source-line', 520, function () {
- test.assertDoesntExist(testFilter + '.active');
- casper.click(testFilter);
- lib.waitForElementCount('.component-viewer-source .source-line', 369, function () {
- test.assertExists(testFilter + '.active');
- });
- });
- })
- });
- })
-
- .then(function () {
- casper.click('.js-header-tab-duplications');
- var testFilter = '.js-filter-duplications';
- casper.waitForSelector(testFilter + '.active', function () {
- lib.waitForElementCount('.component-viewer-source .source-line', 39, function () {
- casper.click(testFilter);
- lib.waitForElementCount('.component-viewer-source .source-line', 520, function () {
- test.assertDoesntExist(testFilter + '.active');
- casper.click(testFilter);
- lib.waitForElementCount('.component-viewer-source .source-line', 39, function () {
- test.assertExists(testFilter + '.active');
- });
- });
- })
- });
- })
-
- .run(function () {
- test.done();
- });
-});
+++ /dev/null
-{
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "path": "src/main/java/org/sonar/batch/index/Cache.java",
- "name": "Cache.java",
- "longName": "src/main/java/org/sonar/batch/index/Cache.java",
- "q": "FIL",
- "subProject": "org.codehaus.sonar:sonar-batch",
- "subProjectName": "SonarQube :: Batch",
- "project": "org.codehaus.sonar:sonar",
- "projectName": "SonarQube",
- "fav": false,
- "canMarkAsFavourite": false,
- "canBulkChange": false,
- "canCreateManualIssue": false,
- "periods": [
- [1, "since previous analysis (2014 Jul 08)", "2014-07-08T23:17:21+0200"],
- [2, "over 365 days (2013 Jul 10)", "2013-07-10T00:41:28+0200"],
- [3, "since previous version (4.4 - 2014 Jul 02)", "2014-07-02T15:39:51+0200"]
- ],
- "severities": [
- ["MINOR", "Minor", 1],
- ["MAJOR", "Major", 1],
- ["INFO", "Info", 4]
- ],
- "rules": [
- ["common-java:DuplicatedBlocks", "Duplicated blocks", 1],
- ["squid:S1192", "String literals should not be duplicated", 1],
- ["squid:S1135", "TODO tags should be handled", 4]
- ],
- "measures": {
- "fNcloc": "379",
- "fCoverage": "74.3%",
- "fDuplicationDensity": "5.8%",
- "fDebt": "3h 30min",
- "fIssues": "6",
- "fMinorIssues": "1",
- "fMajorIssues": "1",
- "fInfoIssues": "4",
- "fSqaleRating": "A"
- },
- "tabs": ["scm", "coverage", "duplications"],
- "manual_rules": [
- {
- "key": "manual:api",
- "name": "API"
- },
- {
- "key": "manual:design",
- "name": "Design"
- },
- {
- "key": "manual:error_handling",
- "name": "Error handling"
- },
- {
- "key": "manual:performance",
- "name": "Performance"
- },
- {
- "key": "manual:sql_pitfalls",
- "name": "SQL Pitfall"
- }
- ]
-}
+++ /dev/null
-{
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "path": "src/main/java/org/sonar/batch/index/Cache.java",
- "name": "Cache.java",
- "longName": "src/main/java/org/sonar/batch/index/Cache.java",
- "q": "FIL",
- "subProject": "org.codehaus.sonar:sonar-batch",
- "subProjectName": "SonarQube :: Batch",
- "project": "org.codehaus.sonar:sonar",
- "projectName": "SonarQube",
- "fav": false,
- "canMarkAsFavourite": true,
- "canBulkChange": true,
- "canCreateManualIssue": true,
- "periods": [
- [1, "since previous analysis (2014 Jul 08)", "2014-07-08T23:17:21+0200"],
- [2, "over 365 days (2013 Jul 10)", "2013-07-10T00:41:28+0200"],
- [3, "since previous version (4.4 - 2014 Jul 02)", "2014-07-02T15:39:51+0200"]
- ],
- "severities": [
- ["MINOR", "Minor", 1],
- ["MAJOR", "Major", 1],
- ["INFO", "Info", 4]
- ],
- "rules": [
- ["common-java:DuplicatedBlocks", "Duplicated blocks", 1],
- ["squid:S1192", "String literals should not be duplicated", 1],
- ["squid:S1135", "TODO tags should be handled", 4]
- ],
- "measures": {
- "fNcloc": "379",
- "fCoverage": "74.3%",
- "fDuplicationDensity": "5.8%",
- "fDebt": "3h 30min",
- "fIssues": "6",
- "fMinorIssues": "1",
- "fMajorIssues": "1",
- "fInfoIssues": "4",
- "fSqaleRating": "A"
- },
- "tabs": ["scm", "coverage", "duplications"],
- "manual_rules": [
- {
- "key": "manual:api",
- "name": "API"
- },
- {
- "key": "manual:design",
- "name": "Design"
- },
- {
- "key": "manual:error_handling",
- "name": "Error handling"
- },
- {
- "key": "manual:performance",
- "name": "Performance"
- },
- {
- "key": "manual:sql_pitfalls",
- "name": "SQL Pitfall"
- }
- ]
-}
+++ /dev/null
-{"coverage": [
- [46, true, 32, null, null],
- [47, true, 32, null, null],
- [48, true, 32, null, null],
- [49, true, 32, null, null],
- [52, true, 2, null, null],
- [53, true, 2, null, null],
- [57, true, 18, null, null],
- [58, true, 18, null, null],
- [62, true, 13, null, null],
- [63, true, 13, null, null],
- [67, false, null, null, null],
- [68, false, null, null, null],
- [73, true, 27, null, null],
- [74, true, 27, null, null],
- [75, true, 27, null, null],
- [76, true, 1, null, null],
- [77, true, 1, null, null],
- [85, true, 5, null, null],
- [86, true, 5, null, null],
- [94, true, 10, null, null],
- [95, true, 10, null, null],
- [103, true, 11, null, null],
- [104, true, 11, null, null],
- [112, false, null, null, null],
- [113, false, null, null, null],
- [120, true, 17, null, null],
- [121, true, 17, 2, 2],
- [122, true, 8, null, null],
- [124, true, 13, null, null],
- [125, false, null, null, null],
- [127, false, null, null, null],
- [132, true, 4, null, null],
- [133, true, 4, null, null],
- [137, true, 3, null, null],
- [138, true, 3, null, null],
- [142, true, 5, null, null],
- [143, true, 5, null, null],
- [147, false, null, null, null],
- [148, false, null, null, null],
- [153, true, 7, null, null],
- [154, true, 7, null, null],
- [155, false, null, null, null],
- [157, false, null, null, null],
- [162, true, 3, null, null],
- [163, true, 3, null, null],
- [167, true, 3, null, null],
- [168, true, 3, null, null],
- [172, true, 2, null, null],
- [173, true, 2, null, null],
- [177, false, null, null, null],
- [178, false, null, null, null],
- [183, true, 6, null, null],
- [184, false, null, null, null],
- [186, false, null, null, null],
- [196, true, 5, null, null],
- [197, true, 5, null, null],
- [201, true, 2, null, null],
- [202, true, 2, null, null],
- [206, true, 1, null, null],
- [207, true, 1, null, null],
- [211, false, null, null, null],
- [212, false, null, null, null],
- [217, true, 5, null, null],
- [218, true, 5, null, null],
- [219, true, 5, null, null],
- [220, true, 5, null, null],
- [221, false, null, null, null],
- [222, false, null, null, null],
- [231, true, 4, null, null],
- [232, true, 4, null, null],
- [233, false, null, null, null],
- [234, false, null, null, null],
- [235, true, 4, null, null],
- [236, true, 4, null, null],
- [248, true, 4, null, null],
- [249, true, 4, null, null],
- [250, true, 4, null, null],
- [251, true, 4, null, null],
- [252, true, 4, null, null],
- [253, true, 4, 2, 2],
- [254, true, 2, null, null],
- [256, true, 4, null, null],
- [257, false, null, null, null],
- [258, false, null, null, null],
- [265, true, 1, null, null],
- [266, true, 1, null, null],
- [267, true, 1, null, null],
- [268, true, 1, null, null],
- [269, true, 1, null, null],
- [270, true, 1, null, null],
- [271, true, 1, 2, 2],
- [272, true, 1, null, null],
- [274, true, 1, null, null],
- [275, false, null, null, null],
- [276, false, null, null, null],
- [287, true, 4, null, null],
- [288, true, 4, null, null],
- [289, true, 4, null, null],
- [290, true, 4, null, null],
- [291, true, 4, 2, 2],
- [292, true, 3, null, null],
- [294, true, 4, null, null],
- [295, false, null, null, null],
- [296, false, null, null, null],
- [305, true, 1, null, null],
- [306, true, 1, null, null],
- [307, true, 1, null, null],
- [308, true, 1, null, null],
- [309, true, 1, null, null],
- [310, false, null, null, null],
- [311, false, null, null, null],
- [316, false, null, null, null],
- [324, true, 23, null, null],
- [325, true, 23, null, null],
- [326, true, 23, null, null],
- [327, true, 23, null, null],
- [328, true, 23, null, null],
- [329, false, null, null, null],
- [330, false, null, null, null],
- [339, true, 16, null, null],
- [340, true, 16, null, null],
- [341, true, 16, null, null],
- [342, true, 16, null, null],
- [343, false, null, null, null],
- [344, false, null, null, null],
- [349, true, 9, null, null],
- [350, true, 9, null, null],
- [351, true, 9, null, null],
- [355, true, 3, null, null],
- [356, true, 3, null, null],
- [357, true, 3, null, null],
- [361, true, 7, null, null],
- [362, true, 7, null, null],
- [363, true, 7, null, null],
- [366, true, 20, null, null],
- [367, true, 20, null, null],
- [368, true, 20, null, null],
- [371, true, 18, null, null],
- [372, true, 18, null, null],
- [373, true, 18, null, null],
- [376, false, null, null, null],
- [377, false, null, 2, 0],
- [378, false, null, null, null],
- [380, false, null, null, null],
- [389, true, 26, null, null],
- [390, true, 26, null, null],
- [391, true, 26, null, null],
- [395, true, 26, null, null],
- [403, true, 26, null, null],
- [404, true, 26, null, null],
- [405, true, 26, null, null],
- [406, true, 26, null, null],
- [411, true, 25, null, null],
- [412, false, null, null, null],
- [413, false, null, null, null],
- [421, true, 23, null, null],
- [422, false, null, null, null],
- [423, false, null, null, null],
- [424, true, 23, null, null],
- [425, true, 23, 2, 1],
- [426, true, 23, null, null],
- [428, false, null, null, null],
- [433, false, null, null, null],
- [440, true, 10, null, null],
- [441, true, 10, null, null],
- [442, true, 10, null, null],
- [446, true, 10, null, null],
- [454, true, 10, null, null],
- [455, true, 10, null, null],
- [456, true, 10, null, null],
- [457, true, 10, null, null],
- [462, true, 10, null, null],
- [463, false, null, null, null],
- [464, false, null, null, null],
- [472, true, 9, null, null],
- [473, false, null, null, null],
- [474, false, null, null, null],
- [475, true, 9, null, null],
- [476, true, 9, 2, 1],
- [477, true, 9, null, null],
- [478, true, 9, null, null],
- [479, true, 9, null, null],
- [480, true, 9, 2, 2],
- [481, true, 9, null, null],
- [483, true, 9, null, null],
- [485, false, null, null, null],
- [490, false, null, null, null],
- [498, true, 16, null, null],
- [499, true, 16, null, null],
- [500, true, 16, null, null],
- [501, true, 16, null, null],
- [504, true, 14, null, null],
- [509, true, 14, null, null],
- [514, false, null, null, null]
-]}
+++ /dev/null
-{"duplications": [
- {
- "blocks": [
- {
- "from": 404,
- "size": 15,
- "_ref": "1"
- },
- {
- "from": 455,
- "size": 15,
- "_ref": "2"
- }
- ]
- }
-], "files": {
- "1": {
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "name": "src/main/java/org/sonar/batch/index/Cache.java",
- "project": "org.codehaus.sonar:sonar",
- "projectName": "SonarQube",
- "subProject": "org.codehaus.sonar:sonar-batch",
- "subProjectName": "SonarQube :: Batch"
- },
- "2": {
- "key": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin:src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
- "name": "src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
- "project": "org.codehaus.sonar-plugins.javascript:javascript",
- "projectName": "JavaScript",
- "subProject": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin",
- "subProjectName": "JavaScript :: Sonar Plugin"
- }
-}}
+++ /dev/null
-{"duplications": [
- {
- "blocks": [
- {
- "from": 404,
- "size": 15,
- "_ref": "1"
- },
- {
- "from": 455,
- "size": 15
- }
- ]
- }
-], "files": {
- "1": {
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "name": "src/main/java/org/sonar/batch/index/Cache.java",
- "project": "org.codehaus.sonar:sonar",
- "projectName": "SonarQube",
- "subProject": "org.codehaus.sonar:sonar-batch",
- "subProjectName": "SonarQube :: Batch"
- }
-}}
+++ /dev/null
-{"duplications": [
- {
- "blocks": [
- {
- "from": 404,
- "size": 15,
- "_ref": "1"
- },
- {
- "from": 455,
- "size": 15,
- "_ref": "1"
- }
- ]
- }
-], "files": {
- "1": {
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "name": "src/main/java/org/sonar/batch/index/Cache.java",
- "project": "org.codehaus.sonar:sonar",
- "projectName": "SonarQube",
- "subProject": "org.codehaus.sonar:sonar-batch",
- "subProjectName": "SonarQube :: Batch"
- }
-}}
+++ /dev/null
-{"maxResultsReached": false, "paging": {
- "pageIndex": 1,
- "pageSize": 999999,
- "total": 27,
- "fTotal": "27",
- "pages": 1
-}, "issues": [
- {
- "key": "1c88fb97-4e89-4719-895d-fdf027cd9e6d",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "checkstyle:com.puppycrawl.tools.checkstyle.checks.TodoCommentCheck_1296413157",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "INFO",
- "message": "Comment matches to-do format 'TODO'.",
- "line": 153,
- "author": "Simon Brandhof",
- "creationDate": "2013-04-17T04:05:53+0200",
- "updateDate": "2013-07-26T12:39:46+0200",
- "fUpdateAge": "12 months",
- "closeDate": "2013-07-26T12:39:46+0200"
- },
- {
- "key": "242b8049-33f5-4bb3-b9a8-ff86de5698d1",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1135",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "INFO",
- "message": "Complete the task associated to this TODO comment.",
- "line": 151,
- "author": "Simon Brandhof",
- "creationDate": "2013-07-26T14:28:10+0200",
- "updateDate": "2013-08-03T00:02:13+0200",
- "fUpdateAge": "11 months",
- "closeDate": "2013-08-03T00:02:13+0200"
- },
- {
- "key": "9942b361-7127-4ee1-950c-bc67cdb21d19",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1135",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "INFO",
- "message": "Complete the task associated to this TODO comment.",
- "line": 151,
- "author": "Simon Brandhof",
- "creationDate": "2013-08-08T00:00:30+0200",
- "updateDate": "2013-08-09T00:24:41+0200",
- "fUpdateAge": "11 months",
- "closeDate": "2013-08-09T00:24:41+0200"
- },
- {
- "key": "987a803e-2dc8-4552-a0ec-e59c7d6bba8e",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1166",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "CRITICAL",
- "message": "",
- "line": 322,
- "author": "Simon Brandhof",
- "creationDate": "2013-08-09T16:04:33+0200",
- "updateDate": "2013-08-09T17:35:26+0200",
- "fUpdateAge": "11 months",
- "closeDate": "2013-08-09T17:35:26+0200"
- },
- {
- "key": "9afae6b5-3328-4867-8263-16ac58589699",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1173",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "MAJOR",
- "message": "Rename 'it' to a meaningful name of at least 3 characters.",
- "line": 297,
- "author": "Simon Brandhof",
- "creationDate": "2013-08-09T16:04:33+0200",
- "updateDate": "2013-08-09T17:35:26+0200",
- "fUpdateAge": "11 months",
- "closeDate": "2013-08-09T17:35:26+0200"
- },
- {
- "key": "cb76411f-7965-4949-bfb8-a7e48b19de1c",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1166",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "CRITICAL",
- "message": "",
- "line": 277,
- "author": "Simon Brandhof",
- "creationDate": "2013-08-09T16:04:33+0200",
- "updateDate": "2013-08-09T17:35:26+0200",
- "fUpdateAge": "11 months",
- "closeDate": "2013-08-09T17:35:26+0200"
- },
- {
- "key": "e4de6481-7bfb-460a-8b3c-24459f9561d3",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1135",
- "status": "CONFIRMED",
- "severity": "INFO",
- "message": "Complete the task associated to this TODO comment.",
- "line": 240,
- "debt": "20min",
- "author": "Simon Brandhof",
- "creationDate": "2013-08-09T16:04:33+0200",
- "updateDate": "2013-08-20T11:32:56+0200",
- "fUpdateAge": "11 months"
- },
- {
- "key": "3a64321a-c031-43ff-bdd6-121cefaf332c",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1186",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MAJOR",
- "message": "Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation.",
- "line": 406,
- "debt": "5min",
- "author": "Simon Brandhof",
- "actionPlan": "eaf2a3b4-e06f-4e8a-92ec-444f1cf68231",
- "creationDate": "2013-08-22T10:19:41+0200",
- "updateDate": "2014-02-24T14:51:05+0100",
- "fUpdateAge": "4 months",
- "closeDate": "2014-02-24T14:51:05+0100"
- },
- {
- "key": "3c330410-3fb7-474b-a6f3-522fb5468c69",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1166",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MAJOR",
- "message": "Either log or rethrow this exception along with some contextual information.",
- "line": 277,
- "assignee": "simon.brandhof",
- "author": "Simon Brandhof",
- "creationDate": "2013-08-22T10:19:41+0200",
- "updateDate": "2013-08-28T12:19:16+0200",
- "fUpdateAge": "10 months",
- "closeDate": "2013-08-28T12:19:16+0200"
- },
- {
- "key": "517b0861-bdfd-4b01-a4fc-2fccbf4e1748",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1192",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MINOR",
- "message": "Define a constant instead of duplicating this literal \"Fail to get element from cache \" 2 times.",
- "line": 124,
- "debt": "10min",
- "author": "Simon Brandhof",
- "creationDate": "2013-08-22T10:19:41+0200",
- "updateDate": "2014-04-29T11:24:53+0200",
- "fUpdateAge": "2 months",
- "closeDate": "2014-04-29T11:24:53+0200",
- "comments": [
- {
- "key": "7b24f4be-bcaa-4896-a5f7-9e1c84648025",
- "login": "simon.brandhof",
- "userName": "Simon Brandhof",
- "htmlText": "Using constants in log messages does not make sense",
- "markdown": "Using constants in log messages does not make sense",
- "updatable": false,
- "createdAt": "2013-09-02T17:04:47+0200"
- }
- ]
- },
- {
- "key": "963c67be-0a42-4fe6-837b-755232e4c41b",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1192",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MINOR",
- "message": "Define a constant instead of duplicating this literal \"Fail to get values from cache \" 3 times.",
- "line": 306,
- "debt": "10min",
- "author": "Simon Brandhof",
- "creationDate": "2013-08-22T10:19:41+0200",
- "updateDate": "2014-04-29T11:24:53+0200",
- "fUpdateAge": "2 months",
- "closeDate": "2014-04-29T11:24:53+0200",
- "comments": [
- {
- "key": "948f7629-4f81-4b5b-8a44-ba9ca05553c4",
- "login": "simon.brandhof",
- "userName": "Simon Brandhof",
- "htmlText": "Using constants in log messages does not make sense",
- "markdown": "Using constants in log messages does not make sense",
- "updatable": false,
- "createdAt": "2013-09-02T17:04:56+0200"
- }
- ]
- },
- {
- "key": "bb6cee43-0e33-41a8-b550-6214418b50c1",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1186",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MAJOR",
- "message": "Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation.",
- "line": 351,
- "debt": "20min",
- "author": "Simon Brandhof",
- "actionPlan": "c3484f53-4bcf-4ae8-ad34-383480070950",
- "creationDate": "2013-08-22T10:19:41+0200",
- "updateDate": "2013-12-10T15:55:46+0100",
- "fUpdateAge": "7 months",
- "closeDate": "2013-12-10T15:55:46+0100"
- },
- {
- "key": "c86f19ef-cacb-43ab-bc7f-a3bfb00e954b",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1166",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MAJOR",
- "message": "Either log or rethrow this exception along with some contextual information.",
- "line": 322,
- "assignee": "simon.brandhof",
- "author": "Simon Brandhof",
- "creationDate": "2013-08-22T10:19:41+0200",
- "updateDate": "2013-08-28T12:19:16+0200",
- "fUpdateAge": "10 months",
- "closeDate": "2013-08-28T12:19:16+0200"
- },
- {
- "key": "26ebfb62-ce60-47e5-86b9-872d8322ddb8",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "findbugs:NP_NULL_PARAM_DEREF",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "CRITICAL",
- "message": "Null passed for nonnull parameter of new Cache$Entry(String, String, Serializable) in org.sonar.batch.index.Cache$EntryIterator.next()",
- "line": 334,
- "author": "Simon Brandhof",
- "creationDate": "2013-09-16T17:20:55+0200",
- "updateDate": "2013-09-17T01:55:28+0200",
- "fUpdateAge": "10 months",
- "closeDate": "2013-09-17T01:55:28+0200"
- },
- {
- "key": "01461208-6c1e-4cdf-9f27-b7afa78e76ec",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1135",
- "status": "CONFIRMED",
- "severity": "INFO",
- "message": "Complete the task associated to this TODO comment.",
- "line": 185,
- "debt": "20min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2013-10-10T23:51:33+0200",
- "updateDate": "2013-12-10T16:22:53+0100",
- "fUpdateAge": "7 months"
- },
- {
- "key": "71a26f48-a90d-4a76-a745-4f6e6e8b1773",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1135",
- "status": "REOPENED",
- "severity": "INFO",
- "message": "Complete the task associated to this TODO comment.",
- "line": 126,
- "debt": "20min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2013-10-10T23:51:33+0200",
- "updateDate": "2013-12-10T16:24:57+0100",
- "fUpdateAge": "7 months"
- },
- {
- "key": "75419c88-0e3c-4311-aa47-fe5731e67558",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1135",
- "status": "CONFIRMED",
- "severity": "INFO",
- "message": "Complete the task associated to this TODO comment.",
- "line": 156,
- "debt": "20min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2013-10-10T23:51:33+0200",
- "updateDate": "2013-12-10T16:25:06+0100",
- "fUpdateAge": "7 months"
- },
- {
- "key": "59fc17f7-c977-4cb6-8f04-fbe88e4b9186",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1192",
- "status": "CONFIRMED",
- "severity": "MINOR",
- "message": "Define a constant instead of duplicating this literal \"Fail to get keys from cache \" 3 times.",
- "line": 258,
- "debt": "10min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2014-02-20T07:48:16+0100",
- "updateDate": "2014-02-24T16:57:34+0100",
- "fUpdateAge": "4 months"
- },
- {
- "key": "e30c874a-0cd1-44db-8dd3-c7cfd5d72929",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1192",
- "status": "CLOSED",
- "resolution": "FALSE-POSITIVE",
- "severity": "MINOR",
- "message": "Define a constant instead of duplicating this literal \"Removing an item is not supported\" 2 times.",
- "line": 420,
- "debt": "10min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2014-02-24T14:51:05+0100",
- "updateDate": "2014-04-29T11:24:53+0200",
- "fUpdateAge": "2 months",
- "closeDate": "2014-04-29T11:24:53+0200"
- },
- {
- "key": "7cc2e50d-3afc-4e7e-a562-eae2fbb9b596",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1192",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MINOR",
- "message": "Define a constant instead of duplicating this literal \"Fail to get values from cache \" 3 times.",
- "line": 311,
- "debt": "10min",
- "assignee": "julien.henry",
- "author": "julien.henry@sonarsource.com",
- "actionPlan": "39d06f0c-98c0-4a4f-956b-38ccbc9eb5c9",
- "creationDate": "2014-04-30T23:37:32+0200",
- "updateDate": "2014-06-20T14:47:17+0200",
- "fUpdateAge": "about a month",
- "closeDate": "2014-06-20T14:47:17+0200"
- },
- {
- "key": "20002ec7-b647-44da-bdf5-4d9fbf4b7c58",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "common-java:DuplicatedBlocks",
- "status": "CONFIRMED",
- "severity": "MAJOR",
- "message": "2 duplicated blocks of code.",
- "debt": "2h",
- "creationDate": "2014-05-01T23:38:31+0200",
- "updateDate": "2014-07-01T17:48:47+0200",
- "fUpdateAge": "21 days"
- },
- {
- "key": "5cbf3374-cd56-4e16-8434-d47ee541b347",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:HiddenFieldCheck",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MAJOR",
- "message": "Rename \"exchange\" which hides the field declared at line 46.",
- "line": 517,
- "debt": "30min",
- "creationDate": "2014-05-06T16:36:28+0200",
- "updateDate": "2014-05-07T23:40:25+0200",
- "fUpdateAge": "2 months",
- "closeDate": "2014-05-07T23:40:25+0200"
- },
- {
- "key": "aac25f93-f7e5-4e75-a750-b64d4d621c67",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1166",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "CRITICAL",
- "message": "Either log or rethrow this exception.",
- "line": 523,
- "debt": "10min",
- "creationDate": "2014-05-06T16:36:28+0200",
- "updateDate": "2014-05-07T23:40:25+0200",
- "fUpdateAge": "2 months",
- "closeDate": "2014-05-07T23:40:25+0200"
- },
- {
- "key": "cdea44e2-a1eb-43dd-a990-662c7cf0b8b9",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "findbugs:REC_CATCH_EXCEPTION",
- "status": "CLOSED",
- "resolution": "FIXED",
- "severity": "MAJOR",
- "message": "Exception is caught when Exception is not thrown in org.sonar.batch.index.Cache.newExchange(Exchange)",
- "line": 523,
- "debt": "1h",
- "creationDate": "2014-05-06T16:36:28+0200",
- "updateDate": "2014-05-07T23:40:25+0200",
- "fUpdateAge": "2 months",
- "closeDate": "2014-05-07T23:40:25+0200"
- },
- {
- "key": "331984f1-e2ce-49a7-838f-a5e2e00bdb65",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1701",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "MAJOR",
- "message": "Rename the \"value\" member.",
- "line": 496,
- "debt": "10min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2014-06-26T23:17:10+0200",
- "updateDate": "2014-06-27T23:12:06+0200",
- "fUpdateAge": "25 days",
- "closeDate": "2014-06-27T23:12:06+0200"
- },
- {
- "key": "539895b5-bca6-491a-94da-24b0105af28f",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1701",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "MAJOR",
- "message": "Rename the \"key\" member.",
- "line": 495,
- "debt": "10min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2014-06-26T23:17:10+0200",
- "updateDate": "2014-06-27T23:12:06+0200",
- "fUpdateAge": "25 days",
- "closeDate": "2014-06-27T23:12:06+0200"
- },
- {
- "key": "889efbf0-b218-4be7-9ff4-84867b5bc808",
- "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "componentId": 19983,
- "project": "org.codehaus.sonar:sonar",
- "rule": "squid:S1701",
- "status": "CLOSED",
- "resolution": "REMOVED",
- "severity": "MAJOR",
- "message": "Rename the \"iterator\" member.",
- "line": 387,
- "debt": "10min",
- "author": "simon.brandhof@gmail.com",
- "creationDate": "2014-06-26T23:17:10+0200",
- "updateDate": "2014-06-27T23:12:06+0200",
- "fUpdateAge": "25 days",
- "closeDate": "2014-06-27T23:12:06+0200"
- }
-], "components": [
- {
- "key": "org.codehaus.sonar:sonar",
- "id": 2865,
- "qualifier": "TRK",
- "name": "SonarQube",
- "longName": "SonarQube"
- },
- {
- "key": "org.codehaus.sonar:sonar-batch",
- "id": 1624,
- "qualifier": "BRC",
- "name": "SonarQube :: Batch",
- "longName": "SonarQube :: Batch",
- "path": "sonar-batch",
- "projectId": 2865,
- "subProjectId": 2865
- },
- {
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "id": 19983,
- "qualifier": "FIL",
- "name": "Cache.java",
- "longName": "src/main/java/org/sonar/batch/index/Cache.java",
- "path": "src/main/java/org/sonar/batch/index/Cache.java",
- "projectId": 2865,
- "subProjectId": 1624
- }
-], "projects": [
- {
- "key": "org.codehaus.sonar:sonar",
- "id": 2865,
- "qualifier": "TRK",
- "name": "SonarQube",
- "longName": "SonarQube"
- }
-], "rules": [
- {
- "key": "squid:S1166",
- "name": "Exception handlers should preserve the original exception",
- "desc": "<p>\nWhen handling a caught exception, two mandatory informations should be logged:\n</p>\n\n<ul>\n <li>Some context to ease the reproduction of the issue.</li>\n <li>The original's exception, for its message and stack trace.</lu>\n</ul>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\n // Noncompliant - exception is lost\ntry { /* ... */ } catch (Exception e) { LOGGER.info(\"context\"); }\n\n// Noncompliant - context is required\ntry { /* ... */ } catch (Exception e) { LOGGER.info(e); }\n\n// Noncompliant - exception is lost (only message is preserved)\ntry { /* ... */ } catch (Exception e) { LOGGER.info(e.getMessage()); }\n\n// Noncompliant - exception is lost\ntry { /* ... */ } catch (Exception e) { throw new RuntimeException(\"context\"); }\n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { LOGGER.info(\"context\", e); }\n\ntry { /* ... */ } catch (Exception e) { throw new RuntimeException(\"context\", e); }\n</pre>\n\n<h2>Exceptions</h2>\n\n<p>It is allowed to let the exception propagate.</p>\n\n<pre>\ntry {\n /* ... */\n} catch (RuntimeException e) {\n doSomething();\n throw e;\n} catch (Exception e) {\n // Conversion into unchecked exception is also allowed\n throw new RuntimeException(e);\n}\n</pre>\n\n<p>\n<code>InterruptedException</code>, <code>NumberFormatException</code>, <code>ParseException</code> and <code>MalformedURLException</code> exceptions are arguably used to indicate nonexceptional outcomes.\nAs they are part of Java, developers have no choice but to deal with them. This rule does not verify that those particular exceptions are correctly handled.\n</p>\n\n<pre>\nint myInteger;\ntry {\n myInteger = Integer.parseInt(myString);\n} catch (NumberFormatException e) {\n // It is perfectly acceptable to not handle \"e\" here\n myInteger = 0;\n}\n</pre>",
- "status": "READY"
- },
- {
- "key": "common-java:DuplicatedBlocks",
- "name": "Duplicated blocks",
- "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
- "status": "READY"
- },
- {
- "key": "findbugs:REC_CATCH_EXCEPTION",
- "name": "Dodgy - Exception is caught when Exception is not thrown",
- "desc": "<p>\n This method uses a try-catch block that catches Exception objects, but Exception is not\n thrown within the try block, and RuntimeException is not explicitly caught. It is a common bug pattern to\n say try { ... } catch (Exception e) { something } as a shorthand for catching a number of types of exception\n each of whose catch blocks is identical, but this construct also accidentally catches RuntimeException as well,\n masking potential bugs.\n </p>",
- "status": "READY"
- },
- {
- "key": "squid:S1701",
- "name": "Fields should not duplicate method names",
- "desc": "<p>It's confusing to have a class member with the same name as a method in the class.</p>\n\n<p>Typically this situation indicates that the method is poorly named; method names should be action-oriented, and thus contain a verb, which is unlikely in the case where both a method and a member have the same name. However, renaming a public method could be disruptive to callers. Therefore renaming the member is the recommended action.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\npublic class Foo {\n\n private string fiz;\n public String fiz() {\n // do something...\n }\n\n private void doSomething() {\n\n String tmp = fiz; // is this what was intended? Should this have been a call to fiz()?\n\n }\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\npublic class Foo {\n\n private string fizbah; // member has been renamed\n public String fiz() {\n // do something...\n }\n\n private void doSomething() {\n\n String tmp = fiz; // results in a compile error\n String tmp2 = fiz(); // no question now what was intended\n }\n}\n</pre>",
- "status": "REMOVED"
- },
- {
- "key": "squid:S1192",
- "name": "String literals should not be duplicated",
- "desc": "<p>\n Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n prepare(\"action1\"); // Non-Compliant - \"action1\" is duplicated 3 times\n execute(\"action1\");\n release(\"action1\");\n}\n\n@SuppressWarning(\"all\") // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n System.out.println(\"'\" + a + \"'\"); // Compliant - literal \"'\" has less than 5 characters and is excluded\n return \"\"; // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\"; // Compliant\n\npublic void run() {\n prepare(ACTION_1); // Compliant\n execute(ACTION_1);\n release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
- "status": "READY"
- },
- {
- "key": "squid:HiddenFieldCheck",
- "name": "Local variables should not shadow class fields",
- "desc": "<p>\nShadowing fields with a local variable is a bad practice reducing code readability: It makes it confusing to know whether the field or the variable is and should be accessed.\n</p>\n\n<p>\nThe following code illustrates this rule:\n</p>\n\n<pre>\nclass Foo {\n public int myField;\n\n public Foo(int myField) { // Compliant - method parameters are not checked\n this.myField = myField;\n }\n\n @Override\n public String toString() {\n int myField = 0; // Non-Compliant - should be renamed\n return \"Foo{MyField: \" + myField + \"}\";\n }\n}\n</pre>",
- "status": "READY"
- },
- {
- "key": "squid:S1135",
- "name": "TODO tags should be handled",
- "desc": "<p>\n<code>TODO</code> tags are commonly used to mark places where some more code is required, but which the developer wants to implement later.\nSometimes the developer will not have the time or will simply forget to get back to that tag.\nThis rule is meant to track those tags, and ensure that they do not go unnoticed.\n</p>\n\n<p>The following code illustrates this rule:</p>\n\n<pre>\nvoid doSomething() {\n // TODO\n}\n</pre>",
- "status": "READY"
- },
- {
- "key": "findbugs:NP_NULL_PARAM_DEREF",
- "name": "Correctness - Method call passes null for nonnull parameter",
- "desc": "<p>\n This method call passes a null value for a nonnull method parameter.\n\tEither the parameter is annotated as a parameter that should\n\talways be nonnull, or analysis has shown that it will always be \n\tdereferenced.\n </p>",
- "status": "READY"
- },
- {
- "key": "squid:S1173",
- "name": "S1173",
- "desc": "S1173",
- "status": "REMOVED"
- },
- {
- "key": "squid:S1186",
- "name": "Methods should not be empty",
- "desc": "<p>There are three reasons for a method not to have a method body:</p>\n\n<ul>\n <li>It is an unintentional omission, and should be fixed.</li>\n <li>It is not yet, or never will be, supported. In this case an <code>UnsupportedOperationException</code> should be thrown.</li>\n <li>The method is an intentionally-blank override. In this case a nested comment should explain the reason for the blank override.</li>\n</ul>\n\n<p>The following code snippet:</p>\n\n<pre>\n// Non-Compliant\npublic void doSomething() {\n}\n</pre>\n\nshould be refactored into:\n\n<pre>\n// Compliant\n@Override\npublic void doSomethingElse() {\n // Do nothing because of X and Y.\n}\n</pre>\n\nor:\n\n<pre>\n// Compliant\n@Override\npublic void doSomethingElse() {\n throw new UnsupportedOperationException();\n}\n</pre>\n\n<p>Empty methods not having any nested comments are tolerated in Abstract classes as those empty methods are usual when implementing the visitor pattern.</p>",
- "status": "READY"
- }
-], "users": [
- {
- "login": "julien.henry",
- "name": "Julien Henry",
- "active": true,
- "email": "julien.henry@sonarsource.com"
- },
- {
- "login": "simon.brandhof",
- "name": "Simon Brandhof",
- "active": true,
- "email": "simon.brandhof@sonarsource.com"
- }
-], "actionPlans": [
- {
- "key": "eaf2a3b4-e06f-4e8a-92ec-444f1cf68231",
- "name": "4.2",
- "status": "CLOSED",
- "project": "org.codehaus.sonar:sonar",
- "userLogin": "fabrice.bellingard",
- "deadLine": "2014-01-31T00:00:00+0100",
- "fDeadLine": "Jan 31, 2014 12:00 AM",
- "createdAt": "2013-12-11T08:35:23+0100",
- "fCreatedAt": "Dec 11, 2013 8:35 AM",
- "updatedAt": "2014-04-14T11:55:03+0200",
- "fUpdatedAt": "Apr 14, 2014 11:55 AM"
- },
- {
- "key": "39d06f0c-98c0-4a4f-956b-38ccbc9eb5c9",
- "name": "4.4",
- "status": "CLOSED",
- "project": "org.codehaus.sonar:sonar",
- "userLogin": "fabrice.bellingard",
- "deadLine": "2014-06-27T00:00:00+0200",
- "fDeadLine": "Jun 27, 2014 12:00 AM",
- "createdAt": "2014-04-14T10:23:34+0200",
- "fCreatedAt": "Apr 14, 2014 10:23 AM",
- "updatedAt": "2014-07-11T16:56:06+0200",
- "fUpdatedAt": "Jul 11, 2014 4:56 PM"
- },
- {
- "key": "c3484f53-4bcf-4ae8-ad34-383480070950",
- "name": "SonarQube 4.1",
- "status": "CLOSED",
- "project": "org.codehaus.sonar:sonar",
- "userLogin": "freddy.mallet",
- "deadLine": "2013-11-05T00:00:00+0100",
- "fDeadLine": "Nov 5, 2013 12:00 AM",
- "createdAt": "2013-10-22T12:39:01+0200",
- "fCreatedAt": "Oct 22, 2013 12:39 PM",
- "updatedAt": "2013-12-12T14:22:07+0100",
- "fUpdatedAt": "Dec 12, 2013 2:22 PM"
- }
-]}
+++ /dev/null
-[
- {
- "id": 19983,
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "name": "Cache.java",
- "scope": "FIL",
- "qualifier": "FIL",
- "date": "2014-07-21T23:18:51+0200",
- "creationDate": "2013-04-17T04:06:45+0200",
- "lname": "src/main/java/org/sonar/batch/index/Cache.java",
- "lang": "java",
- "msr": [
- {
- "key": "lines",
- "val": 519.0,
- "frmt_val": "519"
- },
- {
- "key": "ncloc",
- "val": 379.0,
- "frmt_val": "379"
- },
- {
- "key": "classes",
- "val": 6.0,
- "frmt_val": "6"
- },
- {
- "key": "functions",
- "val": 56.0,
- "frmt_val": "56"
- },
- {
- "key": "accessors",
- "val": 0.0,
- "frmt_val": "0"
- },
- {
- "key": "statements",
- "val": 174.0,
- "frmt_val": "174"
- },
- {
- "key": "public_api",
- "val": 33.0,
- "frmt_val": "33"
- },
- {
- "key": "comment_lines",
- "val": 23.0,
- "frmt_val": "23"
- },
- {
- "key": "comment_lines_density",
- "val": 5.7,
- "frmt_val": "5.7%"
- },
- {
- "key": "public_documented_api_density",
- "val": 36.4,
- "frmt_val": "36.4%"
- },
- {
- "key": "public_undocumented_api",
- "val": 21.0,
- "frmt_val": "21"
- },
- {
- "key": "complexity",
- "val": 116.0,
- "frmt_val": "116"
- },
- {
- "key": "function_complexity",
- "val": 2.1,
- "frmt_val": "2.1"
- },
- {
- "key": "coverage",
- "val": 74.3,
- "frmt_val": "74.3%"
- },
- {
- "key": "lines_to_cover",
- "val": 194.0,
- "frmt_val": "194"
- },
- {
- "key": "uncovered_lines",
- "val": 50.0,
- "frmt_val": "50"
- },
- {
- "key": "line_coverage",
- "val": 74.2,
- "frmt_val": "74.2%"
- },
- {
- "key": "conditions_to_cover",
- "val": 16.0,
- "frmt_val": "16"
- },
- {
- "key": "uncovered_conditions",
- "val": 4.0,
- "frmt_val": "4"
- },
- {
- "key": "branch_coverage",
- "val": 75.0,
- "frmt_val": "75.0%"
- },
- {
- "key": "duplicated_lines",
- "val": 30.0,
- "frmt_val": "30"
- },
- {
- "key": "duplicated_blocks",
- "val": 2.0,
- "frmt_val": "2"
- },
- {
- "key": "duplicated_files",
- "val": 1.0,
- "frmt_val": "1"
- },
- {
- "key": "duplicated_lines_density",
- "val": 5.8,
- "frmt_val": "5.8%"
- },
- {
- "key": "major_violations",
- "val": 1.0,
- "frmt_val": "1"
- },
- {
- "key": "minor_violations",
- "val": 1.0,
- "frmt_val": "1"
- },
- {
- "key": "info_violations",
- "val": 4.0,
- "frmt_val": "4"
- }
- ]
- }
-]
+++ /dev/null
-[
- {
- "id": 19983,
- "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
- "name": "Cache.java",
- "scope": "FIL",
- "qualifier": "FIL",
- "date": "2014-07-21T23:18:51+0200",
- "creationDate": "2013-04-17T04:06:45+0200",
- "lname": "src/main/java/org/sonar/batch/index/Cache.java",
- "lang": "java",
- "msr": [
- {
- "key": "lines",
- "val": 519.0,
- "frmt_val": "519"
- },
- {
- "key": "ncloc",
- "val": 379.0,
- "frmt_val": "379"
- },
- {
- "key": "classes",
- "val": 6.0,
- "frmt_val": "6"
- },
- {
- "key": "functions",
- "val": 56.0,
- "frmt_val": "56"
- },
- {
- "key": "accessors",
- "val": 0.0,
- "frmt_val": "0"
- },
- {
- "key": "statements",
- "val": 174.0,
- "frmt_val": "174"
- },
- {
- "key": "public_api",
- "val": 33.0,
- "frmt_val": "33"
- },
- {
- "key": "comment_lines",
- "val": 23.0,
- "frmt_val": "23"
- },
- {
- "key": "comment_lines_density",
- "val": 5.7,
- "frmt_val": "5.7%"
- },
- {
- "key": "public_documented_api_density",
- "val": 36.4,
- "frmt_val": "36.4%"
- },
- {
- "key": "public_undocumented_api",
- "val": 21.0,
- "frmt_val": "21"
- },
- {
- "key": "complexity",
- "val": 116.0,
- "frmt_val": "116"
- },
- {
- "key": "function_complexity",
- "val": 2.1,
- "frmt_val": "2.1"
- },
- {
- "key": "coverage",
- "val": 74.3,
- "frmt_val": "74.3%"
- },
- {
- "key": "lines_to_cover",
- "val": 194.0,
- "frmt_val": "194"
- },
- {
- "key": "uncovered_lines",
- "val": 50.0,
- "frmt_val": "50"
- },
- {
- "key": "line_coverage",
- "val": 74.2,
- "frmt_val": "74.2%"
- },
- {
- "key": "conditions_to_cover",
- "val": 16.0,
- "frmt_val": "16"
- },
- {
- "key": "uncovered_conditions",
- "val": 4.0,
- "frmt_val": "4"
- },
- {
- "key": "branch_coverage",
- "val": 75.0,
- "frmt_val": "75.0%"
- },
- {
- "key": "duplicated_lines",
- "val": 30.0,
- "frmt_val": "30"
- },
- {
- "key": "duplicated_blocks",
- "val": 2.0,
- "frmt_val": "2"
- },
- {
- "key": "duplicated_files",
- "val": 1.0,
- "frmt_val": "1"
- },
- {
- "key": "duplicated_lines_density",
- "val": 5.8,
- "frmt_val": "5.8%"
- },
- {
- "key": "major_violations",
- "val": 1.0,
- "frmt_val": "1"
- },
- {
- "key": "minor_violations",
- "val": 1.0,
- "frmt_val": "1"
- },
- {
- "key": "info_violations",
- "val": 4.0,
- "frmt_val": "4"
- },
- {
- "key": "ncloc_data",
- "data": "1=0;2=0;3=0;4=0;5=0;6=0;7=0;8=0;9=0;10=0;11=0;12=0;13=0;14=0;15=0;17=0;16=0;19=0;18=0;21=0;20=1;23=1;22=1;25=1;24=1;27=1;26=1;29=1;28=0;31=1;30=0;34=1;35=0;32=1;33=1;38=0;39=0;36=0;37=0;42=0;43=1;40=0;41=1;46=1;47=1;44=1;45=0;51=1;50=0;49=1;48=1;55=0;54=1;53=1;52=1;59=1;58=1;57=1;56=1;63=1;62=1;61=1;60=0;68=1;69=1;70=0;71=1;64=1;65=0;66=1;67=1;76=1;77=1;78=1;79=1;72=1;73=1;74=1;75=1;85=1;84=1;87=1;86=1;81=0;80=0;83=0;82=0;93=1;92=1;95=1;94=1;89=0;88=0;91=0;90=0;102=1;103=1;100=0;101=1;98=0;99=0;96=1;97=0;110=1;111=1;108=0;109=0;106=0;107=0;104=1;105=1;119=1;118=1;117=1;116=1;115=0;114=1;113=1;112=1;127=1;126=0;125=1;124=1;123=1;122=1;121=1;120=1;137=1;136=1;139=1;138=1;141=1;140=0;143=1;142=1;129=1;128=1;131=1;130=0;133=1;132=1;135=0;134=1;152=1;153=1;154=1;155=1;156=0;157=1;158=1;159=1;144=1;145=0;146=1;147=1;148=1;149=1;150=0;151=1;171=1;170=0;169=1;168=1;175=0;174=1;173=1;172=1;163=1;162=1;161=1;160=0;167=1;166=1;165=0;164=1;186=1;187=1;184=1;185=0;190=0;191=0;188=1;189=0;178=1;179=1;176=1;177=1;182=1;183=1;180=0;181=1;205=1;204=0;207=1;206=1;201=1;200=1;203=1;202=1;197=1;196=1;199=0;198=1;193=0;192=0;195=1;194=0;220=1;221=1;222=1;223=1;216=1;217=1;218=1;219=1;212=1;213=1;214=0;215=1;208=1;209=0;210=1;211=1;239=0;238=0;237=0;236=1;235=1;234=1;233=1;232=1;231=1;230=1;229=1;228=0;227=0;226=0;225=0;224=1;254=1;255=1;252=1;253=1;250=1;251=1;248=1;249=1;246=1;247=1;244=0;245=1;242=0;243=0;240=0;241=0;275=1;274=1;273=1;272=1;279=0;278=1;277=1;276=1;283=0;282=0;281=0;280=0;287=1;286=1;285=1;284=0;258=1;259=1;256=1;257=1;262=1;263=1;260=1;261=0;266=1;267=1;264=1;265=1;270=1;271=1;268=1;269=1;305=1;304=1;307=1;306=1;309=1;308=1;311=1;310=1;313=1;312=1;315=1;314=0;317=1;316=1;319=0;318=0;288=1;289=1;290=1;291=1;292=1;293=1;294=1;295=1;296=1;297=1;298=1;299=0;300=0;301=0;302=0;303=1;343=1;342=1;341=1;340=1;339=1;338=1;337=1;336=0;351=1;350=1;349=1;348=1;347=0;346=1;345=1;344=1;326=1;327=1;324=1;325=1;322=1;323=1;320=0;321=0;334=0;335=0;332=1;333=0;330=1;331=1;328=1;329=1;373=1;372=1;375=1;374=0;369=0;368=1;371=1;370=1;381=0;380=1;383=0;382=0;377=1;376=1;379=1;378=1;356=1;357=1;358=1;359=0;352=1;353=0;354=1;355=1;364=0;365=1;366=1;367=1;360=1;361=1;362=1;363=1;410=1;411=1;408=1;409=1;414=1;415=1;412=1;413=1;402=0;403=1;400=1;401=1;406=1;407=0;404=1;405=1;395=1;394=1;393=1;392=0;399=1;398=0;397=1;396=1;387=1;386=1;385=0;384=0;391=1;390=1;389=1;388=0;440=1;441=1;442=1;443=0;444=1;445=1;446=1;447=1;432=1;433=1;434=1;435=1;436=0;437=1;438=1;439=0;425=1;424=1;427=1;426=1;429=1;428=1;431=1;430=0;417=1;416=0;419=1;418=1;421=1;420=1;423=1;422=1;478=1;479=1;476=1;477=1;474=1;475=1;472=1;473=1;470=1;471=1;468=1;469=1;466=1;467=0;464=1;465=1;463=1;462=1;461=1;460=1;459=1;458=0;457=1;456=1;455=1;454=1;453=0;452=1;451=1;450=1;449=0;448=1;508=1;509=1;510=1;511=0;504=1;505=1;506=0;507=1;500=1;501=1;502=0;503=1;496=1;497=0;498=1;499=1;493=0;492=1;495=1;494=1;489=1;488=1;491=1;490=1;485=1;484=1;487=0;486=1;481=1;480=1;483=1;482=1;516=1;517=0;518=1;512=1;513=1;514=1;515=1"
- }
- ]
- }
-]
+++ /dev/null
-{"scm": [
- [1, "simon.brandhof@gmail.com", "2013-04-16"],
- [2, "simon.brandhof@gmail.com", "2013-04-21"],
- [3, "simon.brandhof@gmail.com", "2014-03-11"],
- [4, "simon.brandhof@gmail.com", "2013-04-16"],
- [6, "simon.brandhof@gmail.com", "2013-04-21"],
- [7, "simon.brandhof@gmail.com", "2013-04-16"],
- [11, "simon.brandhof@gmail.com", "2013-04-21"],
- [12, "simon.brandhof@gmail.com", "2013-04-16"],
- [16, "simon.brandhof@gmail.com", "2013-04-22"],
- [19, "simon.brandhof@gmail.com", "2013-04-16"],
- [25, "julien.henry@sonarsource.com", "2014-05-01"],
- [26, "simon.brandhof@gmail.com", "2013-04-17"],
- [30, "julien.henry@sonarsource.com", "2014-04-30"],
- [31, "simon.brandhof@gmail.com", "2013-04-16"],
- [32, "simon.brandhof@gmail.com", "2013-04-17"],
- [33, "julien.henry@sonarsource.com", "2014-05-01"],
- [34, "simon.brandhof@gmail.com", "2013-04-16"],
- [37, "simon.brandhof@gmail.com", "2013-04-17"],
- [38, "simon.brandhof@gmail.com", "2013-04-16"],
- [39, "simon.brandhof@gmail.com", "2013-04-17"],
- [40, "simon.brandhof@gmail.com", "2013-04-16"],
- [41, "simon.brandhof@gmail.com", "2014-02-20"],
- [42, "simon.brandhof@gmail.com", "2013-04-16"],
- [51, "julien.henry@sonarsource.com", "2014-05-01"],
- [52, "simon.brandhof@gmail.com", "2014-02-20"],
- [54, "simon.brandhof@gmail.com", "2013-04-16"],
- [56, "julien.henry@sonarsource.com", "2014-05-01"],
- [57, "simon.brandhof@gmail.com", "2014-02-20"],
- [61, "julien.henry@sonarsource.com", "2014-05-01"],
- [62, "simon.brandhof@gmail.com", "2014-02-20"],
- [66, "julien.henry@sonarsource.com", "2014-05-01"],
- [67, "simon.brandhof@gmail.com", "2014-02-20"],
- [71, "julien.henry@sonarsource.com", "2014-05-01"],
- [72, "simon.brandhof@gmail.com", "2013-04-16"],
- [77, "simon.brandhof@gmail.com", "2013-05-29"],
- [78, "simon.brandhof@gmail.com", "2013-04-16"],
- [82, "simon.brandhof@gmail.com", "2014-02-20"],
- [83, "simon.brandhof@gmail.com", "2013-04-16"],
- [84, "simon.brandhof@gmail.com", "2014-02-20"],
- [116, "julien.henry@sonarsource.com", "2014-05-01"],
- [117, "simon.brandhof@gmail.com", "2014-02-20"],
- [119, "simon.brandhof@gmail.com", "2013-04-16"],
- [126, "simon.brandhof@gmail.com", "2013-10-10"],
- [127, "simon.brandhof@gmail.com", "2013-05-29"],
- [128, "simon.brandhof@gmail.com", "2013-04-16"],
- [131, "simon.brandhof@gmail.com", "2014-02-20"],
- [144, "simon.brandhof@gmail.com", "2013-04-16"],
- [146, "simon.brandhof@gmail.com", "2014-02-20"],
- [152, "simon.brandhof@gmail.com", "2013-10-10"],
- [161, "simon.brandhof@gmail.com", "2014-02-20"],
- [182, "simon.brandhof@gmail.com", "2013-04-16"],
- [183, "simon.brandhof@gmail.com", "2013-04-26"],
- [184, "simon.brandhof@gmail.com", "2013-04-16"],
- [185, "simon.brandhof@gmail.com", "2013-10-10"],
- [186, "simon.brandhof@gmail.com", "2013-05-29"],
- [187, "simon.brandhof@gmail.com", "2013-04-16"],
- [195, "julien.henry@sonarsource.com", "2014-05-01"],
- [196, "simon.brandhof@gmail.com", "2014-02-20"],
- [200, "julien.henry@sonarsource.com", "2014-05-01"],
- [201, "simon.brandhof@gmail.com", "2014-02-20"],
- [205, "julien.henry@sonarsource.com", "2014-05-01"],
- [206, "simon.brandhof@gmail.com", "2014-02-20"],
- [210, "julien.henry@sonarsource.com", "2014-05-01"],
- [211, "simon.brandhof@gmail.com", "2014-02-20"],
- [215, "julien.henry@sonarsource.com", "2014-05-01"],
- [216, "simon.brandhof@gmail.com", "2013-04-16"],
- [217, "simon.brandhof@gmail.com", "2014-02-20"],
- [220, "simon.brandhof@gmail.com", "2013-04-16"],
- [222, "simon.brandhof@gmail.com", "2014-02-20"],
- [223, "simon.brandhof@gmail.com", "2013-04-16"],
- [229, "simon.brandhof@gmail.com", "2014-02-20"],
- [230, "simon.brandhof@gmail.com", "2013-04-16"],
- [245, "julien.henry@sonarsource.com", "2014-05-01"],
- [246, "simon.brandhof@gmail.com", "2014-02-20"],
- [247, "simon.brandhof@gmail.com", "2013-04-16"],
- [248, "simon.brandhof@gmail.com", "2014-02-20"],
- [249, "simon.brandhof@gmail.com", "2013-04-16"],
- [251, "simon.brandhof@gmail.com", "2014-02-20"],
- [252, "simon.brandhof@gmail.com", "2013-04-16"],
- [254, "simon.brandhof@gmail.com", "2014-02-20"],
- [255, "simon.brandhof@gmail.com", "2013-04-16"],
- [258, "simon.brandhof@gmail.com", "2013-05-29"],
- [259, "simon.brandhof@gmail.com", "2013-04-16"],
- [262, "julien.henry@sonarsource.com", "2014-05-01"],
- [263, "simon.brandhof@gmail.com", "2014-02-20"],
- [279, "simon.brandhof@gmail.com", "2013-04-16"],
- [285, "simon.brandhof@gmail.com", "2014-02-20"],
- [298, "simon.brandhof@gmail.com", "2013-04-16"],
- [300, "simon.brandhof@gmail.com", "2013-05-29"],
- [301, "julien.henry@sonarsource.com", "2014-04-30"],
- [308, "julien.henry@sonarsource.com", "2014-05-01"],
- [310, "julien.henry@sonarsource.com", "2014-04-30"],
- [311, "julien.henry@sonarsource.com", "2014-06-20"],
- [312, "julien.henry@sonarsource.com", "2014-04-30"],
- [315, "julien.henry@sonarsource.com", "2014-06-20"],
- [319, "julien.henry@sonarsource.com", "2014-04-30"],
- [320, "simon.brandhof@gmail.com", "2014-02-20"],
- [321, "simon.brandhof@gmail.com", "2013-05-29"],
- [322, "julien.henry@sonarsource.com", "2014-05-01"],
- [323, "simon.brandhof@gmail.com", "2013-04-16"],
- [325, "julien.henry@sonarsource.com", "2014-05-01"],
- [326, "simon.brandhof@gmail.com", "2013-04-16"],
- [327, "julien.henry@sonarsource.com", "2014-05-01"],
- [329, "simon.brandhof@gmail.com", "2013-04-16"],
- [330, "julien.henry@sonarsource.com", "2014-06-20"],
- [331, "simon.brandhof@gmail.com", "2013-04-16"],
- [334, "simon.brandhof@gmail.com", "2013-05-29"],
- [337, "simon.brandhof@gmail.com", "2013-04-16"],
- [339, "simon.brandhof@gmail.com", "2014-02-20"],
- [340, "simon.brandhof@gmail.com", "2013-04-16"],
- [341, "julien.henry@sonarsource.com", "2014-05-01"],
- [343, "simon.brandhof@gmail.com", "2013-04-16"],
- [344, "julien.henry@sonarsource.com", "2014-06-20"],
- [345, "simon.brandhof@gmail.com", "2013-04-16"],
- [347, "simon.brandhof@gmail.com", "2013-04-17"],
- [348, "simon.brandhof@gmail.com", "2014-02-20"],
- [350, "julien.henry@sonarsource.com", "2014-05-01"],
- [352, "simon.brandhof@gmail.com", "2013-04-17"],
- [353, "simon.brandhof@gmail.com", "2014-02-20"],
- [354, "julien.henry@sonarsource.com", "2014-05-01"],
- [358, "simon.brandhof@gmail.com", "2013-04-17"],
- [359, "simon.brandhof@gmail.com", "2014-02-20"],
- [363, "simon.brandhof@gmail.com", "2013-04-17"],
- [365, "simon.brandhof@gmail.com", "2014-02-20"],
- [368, "simon.brandhof@gmail.com", "2013-04-17"],
- [370, "simon.brandhof@gmail.com", "2014-02-20"],
- [380, "simon.brandhof@gmail.com", "2013-04-17"],
- [382, "simon.brandhof@gmail.com", "2013-05-29"],
- [389, "julien.henry@sonarsource.com", "2014-05-01"],
- [391, "simon.brandhof@gmail.com", "2013-05-29"],
- [401, "julien.henry@sonarsource.com", "2014-05-01"],
- [402, "simon.brandhof@gmail.com", "2013-05-29"],
- [403, "julien.henry@sonarsource.com", "2014-05-01"],
- [404, "simon.brandhof@gmail.com", "2013-05-29"],
- [405, "julien.henry@sonarsource.com", "2014-05-01"],
- [406, "simon.brandhof@gmail.com", "2013-05-29"],
- [411, "julien.henry@sonarsource.com", "2014-05-01"],
- [412, "simon.brandhof@gmail.com", "2013-05-29"],
- [417, "julien.henry@sonarsource.com", "2014-05-01"],
- [418, "simon.brandhof@gmail.com", "2013-05-29"],
- [420, "simon.brandhof@gmail.com", "2014-02-20"],
- [421, "julien.henry@sonarsource.com", "2014-05-01"],
- [422, "simon.brandhof@gmail.com", "2014-02-20"],
- [425, "simon.brandhof@gmail.com", "2013-05-29"],
- [426, "julien.henry@sonarsource.com", "2014-05-01"],
- [427, "simon.brandhof@gmail.com", "2013-05-29"],
- [428, "julien.henry@sonarsource.com", "2014-05-01"],
- [429, "simon.brandhof@gmail.com", "2013-05-29"],
- [433, "simon.brandhof@gmail.com", "2014-02-24"],
- [434, "simon.brandhof@gmail.com", "2013-05-29"],
- [437, "simon.brandhof@gmail.com", "2013-04-17"],
- [440, "julien.henry@sonarsource.com", "2014-05-01"],
- [442, "simon.brandhof@gmail.com", "2013-04-17"],
- [452, "julien.henry@sonarsource.com", "2014-05-01"],
- [453, "simon.brandhof@gmail.com", "2013-04-17"],
- [454, "julien.henry@sonarsource.com", "2014-05-01"],
- [455, "simon.brandhof@gmail.com", "2013-04-17"],
- [456, "julien.henry@sonarsource.com", "2014-05-01"],
- [457, "simon.brandhof@gmail.com", "2013-04-17"],
- [462, "julien.henry@sonarsource.com", "2014-05-01"],
- [463, "simon.brandhof@gmail.com", "2013-04-17"],
- [468, "julien.henry@sonarsource.com", "2014-05-01"],
- [469, "simon.brandhof@gmail.com", "2013-04-17"],
- [470, "julien.henry@sonarsource.com", "2014-05-01"],
- [475, "simon.brandhof@gmail.com", "2013-04-17"],
- [476, "julien.henry@sonarsource.com", "2014-05-01"],
- [478, "simon.brandhof@gmail.com", "2013-04-17"],
- [479, "simon.brandhof@gmail.com", "2014-02-20"],
- [483, "julien.henry@sonarsource.com", "2014-05-01"],
- [486, "simon.brandhof@gmail.com", "2013-04-17"],
- [490, "simon.brandhof@gmail.com", "2014-02-24"],
- [491, "simon.brandhof@gmail.com", "2013-04-17"],
- [494, "simon.brandhof@gmail.com", "2014-02-20"],
- [497, "simon.brandhof@gmail.com", "2013-04-17"],
- [498, "simon.brandhof@gmail.com", "2014-02-20"],
- [499, "simon.brandhof@gmail.com", "2013-04-17"],
- [503, "simon.brandhof@gmail.com", "2014-02-20"],
- [504, "simon.brandhof@gmail.com", "2013-04-17"],
- [508, "simon.brandhof@gmail.com", "2014-02-20"],
- [509, "simon.brandhof@gmail.com", "2013-04-17"],
- [517, "julien.henry@sonarsource.com", "2014-05-06"],
- [518, "simon.brandhof@gmail.com", "2013-04-16"]
-]}
+++ /dev/null
-{"sources": [
- [1, "<span class=\"cppd\">/*</span>"],
- [2, "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>"],
- [3, "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>"],
- [4, "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>"],
- [5, "<span class=\"cppd\"> *</span>"],
- [6, "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>"],
- [7, "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>"],
- [8, "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>"],
- [9, "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>"],
- [10, "<span class=\"cppd\"> *</span>"],
- [11, "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>"],
- [12, "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>"],
- [13, "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span>"],
- [14, "<span class=\"cppd\"> * Lesser General Public License for more details.</span>"],
- [15, "<span class=\"cppd\"> *</span>"],
- [16, "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>"],
- [17, "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>"],
- [18, "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span>"],
- [19, "<span class=\"cppd\"> */</span>"],
- [20, "<span class=\"k\">package </span>org.sonar.batch.index;"],
- [21, ""],
- [22, "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-949 sym\">Sets</span>;"],
- [23, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-976 sym\">Exchange</span>;"],
- [24, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1007 sym\">Key</span>;"],
- [25, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1033 sym\">KeyFilter</span>;"],
- [26, "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-1075 sym\">PersistitException</span>;"],
- [27, "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-1134 sym\">ToStringBuilder</span>;"],
- [28, ""],
- [29, "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-1176 sym\">CheckForNull</span>;"],
- [30, ""],
- [31, "<span class=\"k\">import </span>java.io.<span class=\"sym-1206 sym\">Serializable</span>;"],
- [32, "<span class=\"k\">import </span>java.util.<span class=\"sym-1237 sym\">Iterator</span>;"],
- [33, "<span class=\"k\">import </span>java.util.<span class=\"sym-1264 sym\">NoSuchElementException</span>;"],
- [34, "<span class=\"k\">import </span>java.util.<span class=\"sym-1305 sym\">Set</span>;"],
- [35, ""],
- [36, "<span class=\"cppd\">/**</span>"],
- [37, "<span class=\"cppd\"> * <p></span>"],
- [38, "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>"],
- [39, "<span class=\"cppd\"> * </p></span>"],
- [40, "<span class=\"cppd\"> */</span>"],
- [41, "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1435 sym\">Cache</span><V <span class=\"k\">extends </span>Serializable> {"],
- [42, ""],
- [43, " <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-1491 sym\">name</span>;"],
- [44, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1522 sym\">exchange</span>;"],
- [45, ""],
- [46, " <span class=\"sym-1535 sym\">Cache</span>(String <span class=\"sym-1548 sym\">name</span>, <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1563 sym\">exchange</span>) {"],
- [47, " <span class=\"k\">this</span>.<span class=\"sym-1491 sym\">name</span> = <span class=\"sym-1548 sym\">name</span>;"],
- [48, " <span class=\"k\">this</span>.<span class=\"sym-1522 sym\">exchange</span> = <span class=\"sym-1563 sym\">exchange</span>;"],
- [49, " }"],
- [50, ""],
- [51, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-1650 sym\">put</span>(Object <span class=\"sym-1661 sym\">key</span>, V <span class=\"sym-1668 sym\">value</span>) {"],
- [52, " resetKey(<span class=\"sym-1661 sym\">key</span>);"],
- [53, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1668 sym\">value</span>);"],
- [54, " }"],
- [55, ""],
- [56, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-1744 sym\">put</span>(Object <span class=\"sym-1755 sym\">firstKey</span>, Object <span class=\"sym-1772 sym\">secondKey</span>, V <span class=\"sym-1785 sym\">value</span>) {"],
- [57, " resetKey(<span class=\"sym-1755 sym\">firstKey</span>, <span class=\"sym-1772 sym\">secondKey</span>);"],
- [58, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1785 sym\">value</span>);"],
- [59, " }"],
- [60, ""],
- [61, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-1877 sym\">put</span>(Object <span class=\"sym-1888 sym\">firstKey</span>, Object <span class=\"sym-1905 sym\">secondKey</span>, Object <span class=\"sym-1923 sym\">thirdKey</span>, V <span class=\"sym-1935 sym\">value</span>) {"],
- [62, " resetKey(<span class=\"sym-1888 sym\">firstKey</span>, <span class=\"sym-1905 sym\">secondKey</span>, <span class=\"sym-1923 sym\">thirdKey</span>);"],
- [63, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1935 sym\">value</span>);"],
- [64, " }"],
- [65, ""],
- [66, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-2037 sym\">put</span>(Object[] <span class=\"sym-2050 sym\">key</span>, V <span class=\"sym-2057 sym\">value</span>) {"],
- [67, " resetKey(<span class=\"sym-2050 sym\">key</span>);"],
- [68, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-2057 sym\">value</span>);"],
- [69, " }"],
- [70, ""],
- [71, " <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-2134 sym\">doPut</span>(V <span class=\"sym-2142 sym\">value</span>) {"],
- [72, " <span class=\"k\">try </span>{"],
- [73, " <span class=\"sym-1522 sym\">exchange</span>.getValue().put(<span class=\"sym-2142 sym\">value</span>);"],
- [74, " <span class=\"sym-1522 sym\">exchange</span>.store();"],
- [75, " <span class=\"k\">return </span><span class=\"k\">this</span>;"],
- [76, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-2265 sym\">e</span>) {"],
- [77, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-2265 sym\">e</span>);"],
- [78, " }"],
- [79, " }"],
- [80, ""],
- [81, " <span class=\"cppd\">/**</span>"],
- [82, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
- [83, "<span class=\"cppd\"> */</span>"],
- [84, " <span class=\"k\">public </span>V <span class=\"sym-2464 sym\">get</span>(Object <span class=\"sym-2475 sym\">key</span>) {"],
- [85, " resetKey(<span class=\"sym-2475 sym\">key</span>);"],
- [86, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
- [87, " }"],
- [88, ""],
- [89, " <span class=\"cppd\">/**</span>"],
- [90, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
- [91, "<span class=\"cppd\"> */</span>"],
- [92, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
- [93, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-2639 sym\">get</span>(Object <span class=\"sym-2650 sym\">firstKey</span>, Object <span class=\"sym-2667 sym\">secondKey</span>) {"],
- [94, " resetKey(<span class=\"sym-2650 sym\">firstKey</span>, <span class=\"sym-2667 sym\">secondKey</span>);"],
- [95, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
- [96, " }"],
- [97, ""],
- [98, " <span class=\"cppd\">/**</span>"],
- [99, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
- [100, "<span class=\"cppd\"> */</span>"],
- [101, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
- [102, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-2853 sym\">get</span>(Object <span class=\"sym-2864 sym\">firstKey</span>, Object <span class=\"sym-2881 sym\">secondKey</span>, Object <span class=\"sym-2899 sym\">thirdKey</span>) {"],
- [103, " resetKey(<span class=\"sym-2864 sym\">firstKey</span>, <span class=\"sym-2881 sym\">secondKey</span>, <span class=\"sym-2899 sym\">thirdKey</span>);"],
- [104, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
- [105, " }"],
- [106, ""],
- [107, " <span class=\"cppd\">/**</span>"],
- [108, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
- [109, "<span class=\"cppd\"> */</span>"],
- [110, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
- [111, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-3094 sym\">get</span>(Object[] <span class=\"sym-3107 sym\">key</span>) {"],
- [112, " resetKey(<span class=\"sym-3107 sym\">key</span>);"],
- [113, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
- [114, " }"],
- [115, ""],
- [116, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
- [117, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
- [118, "<span class=\"a\"> </span><span class=\"k\">private </span>V <span class=\"sym-3219 sym\">doGet</span>() {"],
- [119, " <span class=\"k\">try </span>{"],
- [120, " <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
- [121, " <span class=\"k\">if </span>(!<span class=\"sym-1522 sym\">exchange</span>.getValue().isDefined()) {"],
- [122, " <span class=\"k\">return </span><span class=\"k\">null</span>;"],
- [123, " }"],
- [124, " <span class=\"k\">return </span>(V) <span class=\"sym-1522 sym\">exchange</span>.getValue().get();"],
- [125, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-3405 sym\">e</span>) {"],
- [126, " <span class=\"cppd\">// TODO add parameters to message</span>"],
- [127, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-3405 sym\">e</span>);"],
- [128, " }"],
- [129, " }"],
- [130, ""],
- [131, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3562 sym\">containsKey</span>(Object <span class=\"sym-3581 sym\">key</span>) {"],
- [132, " resetKey(<span class=\"sym-3581 sym\">key</span>);"],
- [133, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
- [134, " }"],
- [135, ""],
- [136, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3657 sym\">containsKey</span>(Object <span class=\"sym-3676 sym\">firstKey</span>, Object <span class=\"sym-3693 sym\">secondKey</span>) {"],
- [137, " resetKey(<span class=\"sym-3676 sym\">firstKey</span>, <span class=\"sym-3693 sym\">secondKey</span>);"],
- [138, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
- [139, " }"],
- [140, ""],
- [141, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3791 sym\">containsKey</span>(Object <span class=\"sym-3810 sym\">firstKey</span>, Object <span class=\"sym-3827 sym\">secondKey</span>, Object <span class=\"sym-3845 sym\">thirdKey</span>) {"],
- [142, " resetKey(<span class=\"sym-3810 sym\">firstKey</span>, <span class=\"sym-3827 sym\">secondKey</span>, <span class=\"sym-3845 sym\">thirdKey</span>);"],
- [143, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
- [144, " }"],
- [145, ""],
- [146, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3952 sym\">containsKey</span>(Object[] <span class=\"sym-3973 sym\">key</span>) {"],
- [147, " resetKey(<span class=\"sym-3973 sym\">key</span>);"],
- [148, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
- [149, " }"],
- [150, ""],
- [151, " <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4050 sym\">doContainsKey</span>() {"],
- [152, " <span class=\"k\">try </span>{"],
- [153, " <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
- [154, " <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.isValueDefined();"],
- [155, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-4165 sym\">e</span>) {"],
- [156, " <span class=\"cppd\">// TODO add parameters to message</span>"],
- [157, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4165 sym\">e</span>);"],
- [158, " }"],
- [159, " }"],
- [160, ""],
- [161, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4328 sym\">remove</span>(Object <span class=\"sym-4342 sym\">key</span>) {"],
- [162, " resetKey(<span class=\"sym-4342 sym\">key</span>);"],
- [163, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
- [164, " }"],
- [165, ""],
- [166, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4413 sym\">remove</span>(Object <span class=\"sym-4427 sym\">firstKey</span>, Object <span class=\"sym-4444 sym\">secondKey</span>) {"],
- [167, " resetKey(<span class=\"sym-4427 sym\">firstKey</span>, <span class=\"sym-4444 sym\">secondKey</span>);"],
- [168, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
- [169, " }"],
- [170, ""],
- [171, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4537 sym\">remove</span>(Object <span class=\"sym-4551 sym\">firstKey</span>, Object <span class=\"sym-4568 sym\">secondKey</span>, Object <span class=\"sym-4586 sym\">thirdKey</span>) {"],
- [172, " resetKey(<span class=\"sym-4551 sym\">firstKey</span>, <span class=\"sym-4568 sym\">secondKey</span>, <span class=\"sym-4586 sym\">thirdKey</span>);"],
- [173, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
- [174, " }"],
- [175, ""],
- [176, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4688 sym\">remove</span>(Object[] <span class=\"sym-4704 sym\">key</span>) {"],
- [177, " resetKey(<span class=\"sym-4704 sym\">key</span>);"],
- [178, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
- [179, " }"],
- [180, ""],
- [181, " <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4776 sym\">doRemove</span>() {"],
- [182, " <span class=\"k\">try </span>{"],
- [183, " <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.remove();"],
- [184, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-4854 sym\">e</span>) {"],
- [185, " <span class=\"cppd\">// TODO add parameters to message</span>"],
- [186, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4854 sym\">e</span>);"],
- [187, " }"],
- [188, " }"],
- [189, ""],
- [190, " <span class=\"cppd\">/**</span>"],
- [191, "<span class=\"cppd\"> * Removes everything in the specified group.</span>"],
- [192, "<span class=\"cppd\"> *</span>"],
- [193, "<span class=\"cppd\"> * @param group The group name.</span>"],
- [194, "<span class=\"cppd\"> */</span>"],
- [195, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5111 sym\">clear</span>(Object <span class=\"sym-5124 sym\">key</span>) {"],
- [196, " resetKey(<span class=\"sym-5124 sym\">key</span>);"],
- [197, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
- [198, " }"],
- [199, ""],
- [200, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5195 sym\">clear</span>(Object <span class=\"sym-5208 sym\">firstKey</span>, Object <span class=\"sym-5225 sym\">secondKey</span>) {"],
- [201, " resetKey(<span class=\"sym-5208 sym\">firstKey</span>, <span class=\"sym-5225 sym\">secondKey</span>);"],
- [202, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
- [203, " }"],
- [204, ""],
- [205, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5318 sym\">clear</span>(Object <span class=\"sym-5331 sym\">firstKey</span>, Object <span class=\"sym-5348 sym\">secondKey</span>, Object <span class=\"sym-5366 sym\">thirdKey</span>) {"],
- [206, " resetKey(<span class=\"sym-5331 sym\">firstKey</span>, <span class=\"sym-5348 sym\">secondKey</span>, <span class=\"sym-5366 sym\">thirdKey</span>);"],
- [207, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
- [208, " }"],
- [209, ""],
- [210, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5468 sym\">clear</span>(Object[] <span class=\"sym-5483 sym\">key</span>) {"],
- [211, " resetKey(<span class=\"sym-5483 sym\">key</span>);"],
- [212, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
- [213, " }"],
- [214, ""],
- [215, " <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5555 sym\">doClear</span>() {"],
- [216, " <span class=\"k\">try </span>{"],
- [217, " <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-5587 sym\">to</span> = <span class=\"k\">new </span><span class=\"sym-1007 sym\">Key</span>(<span class=\"sym-1522 sym\">exchange</span>.getKey());"],
- [218, " <span class=\"sym-5587 sym\">to</span>.append(<span class=\"sym-1007 sym\">Key</span>.AFTER);"],
- [219, " <span class=\"sym-1522 sym\">exchange</span>.removeKeyRange(<span class=\"sym-1522 sym\">exchange</span>.getKey(), <span class=\"sym-5587 sym\">to</span>);"],
- [220, " <span class=\"k\">return </span><span class=\"k\">this</span>;"],
- [221, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-5744 sym\">e</span>) {"],
- [222, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-5744 sym\">e</span>);"],
- [223, " }"],
- [224, " }"],
- [225, ""],
- [226, " <span class=\"cppd\">/**</span>"],
- [227, "<span class=\"cppd\"> * Clears the default as well as all group caches.</span>"],
- [228, "<span class=\"cppd\"> */</span>"],
- [229, " <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-5924 sym\">clear</span>() {"],
- [230, " <span class=\"k\">try </span>{"],
- [231, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [232, " <span class=\"sym-1522 sym\">exchange</span>.removeAll();"],
- [233, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-6019 sym\">e</span>) {"],
- [234, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-6019 sym\">e</span>);"],
- [235, " }"],
- [236, " }"],
- [237, ""],
- [238, " <span class=\"cppd\">/**</span>"],
- [239, "<span class=\"cppd\"> * Returns the set of cache keys associated with this group.</span>"],
- [240, "<span class=\"cppd\"> * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>"],
- [241, "<span class=\"cppd\"> *</span>"],
- [242, "<span class=\"cppd\"> * @param group The group.</span>"],
- [243, "<span class=\"cppd\"> * @return The set of cache keys for this group.</span>"],
- [244, "<span class=\"cppd\"> */</span>"],
- [245, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
- [246, " <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6374 sym\">keySet</span>(Object <span class=\"sym-6388 sym\">key</span>) {"],
- [247, " <span class=\"k\">try </span>{"],
- [248, " <span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-6423 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
- [249, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [250, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-6494 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
- [251, " <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-6388 sym\">key</span>);"],
- [252, " <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [253, " <span class=\"k\">while </span>(<span class=\"sym-6494 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
- [254, " <span class=\"sym-6423 sym\">keys</span>.add(<span class=\"sym-6494 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
- [255, " }"],
- [256, " <span class=\"k\">return </span><span class=\"sym-6423 sym\">keys</span>;"],
- [257, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-6777 sym\">e</span>) {"],
- [258, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-6777 sym\">e</span>);"],
- [259, " }"],
- [260, " }"],
- [261, ""],
- [262, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
- [263, " <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6919 sym\">keySet</span>(Object <span class=\"sym-6933 sym\">firstKey</span>, Object <span class=\"sym-6950 sym\">secondKey</span>) {"],
- [264, " <span class=\"k\">try </span>{"],
- [265, " <span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-6991 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
- [266, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [267, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7062 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
- [268, " <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6933 sym\">firstKey</span>);"],
- [269, " <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6950 sym\">secondKey</span>);"],
- [270, " <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [271, " <span class=\"k\">while </span>(<span class=\"sym-7062 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
- [272, " <span class=\"sym-6991 sym\">keys</span>.add(<span class=\"sym-7062 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
- [273, " }"],
- [274, " <span class=\"k\">return </span><span class=\"sym-6991 sym\">keys</span>;"],
- [275, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-7392 sym\">e</span>) {"],
- [276, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7392 sym\">e</span>);"],
- [277, " }"],
- [278, " }"],
- [279, ""],
- [280, " <span class=\"cppd\">/**</span>"],
- [281, "<span class=\"cppd\"> * Returns the set of keys associated with this cache.</span>"],
- [282, "<span class=\"cppd\"> *</span>"],
- [283, "<span class=\"cppd\"> * @return The set containing the keys for this cache.</span>"],
- [284, "<span class=\"cppd\"> */</span>"],
- [285, " <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-7641 sym\">keySet</span>() {"],
- [286, " <span class=\"k\">try </span>{"],
- [287, " <span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-7680 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
- [288, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [289, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7751 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
- [290, " <span class=\"sym-7751 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [291, " <span class=\"k\">while </span>(<span class=\"sym-7751 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
- [292, " <span class=\"sym-7680 sym\">keys</span>.add(<span class=\"sym-7751 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
- [293, " }"],
- [294, " <span class=\"k\">return </span><span class=\"sym-7680 sym\">keys</span>;"],
- [295, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-7998 sym\">e</span>) {"],
- [296, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7998 sym\">e</span>);"],
- [297, " }"],
- [298, " }"],
- [299, ""],
- [300, " <span class=\"cppd\">/**</span>"],
- [301, "<span class=\"cppd\"> * Lazy-loading values for given keys</span>"],
- [302, "<span class=\"cppd\"> */</span>"],
- [303, " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-8168 sym\">values</span>(Object <span class=\"sym-8182 sym\">firstKey</span>, Object <span class=\"sym-8199 sym\">secondKey</span>) {"],
- [304, " <span class=\"k\">try </span>{"],
- [305, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [306, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8182 sym\">firstKey</span>).append(<span class=\"sym-8199 sym\">secondKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [307, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8331 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
- [308, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-8390 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8182 sym\">firstKey</span>)).append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8199 sym\">secondKey</span>));"],
- [309, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span><V>(<span class=\"sym-8331 sym\">iteratorExchange</span>, <span class=\"sym-8390 sym\">filter</span>);"],
- [310, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-8579 sym\">e</span>) {"],
- [311, " <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-8579 sym\">e</span>);"],
- [312, " }"],
- [313, " }"],
- [314, ""],
- [315, " <span class=\"k\">private </span>IllegalStateException <span class=\"sym-8659 sym\">failToGetValues</span>(Exception <span class=\"sym-8685 sym\">e</span>) {"],
- [316, " <span class=\"k\">return </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-8685 sym\">e</span>);"],
- [317, " }"],
- [318, ""],
- [319, " <span class=\"cppd\">/**</span>"],
- [320, "<span class=\"cppd\"> * Lazy-loading values for a given key</span>"],
- [321, "<span class=\"cppd\"> */</span>"],
- [322, " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-8851 sym\">values</span>(Object <span class=\"sym-8865 sym\">firstKey</span>) {"],
- [323, " <span class=\"k\">try </span>{"],
- [324, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [325, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8865 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [326, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8978 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
- [327, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9037 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8865 sym\">firstKey</span>));"],
- [328, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span><V>(<span class=\"sym-8978 sym\">iteratorExchange</span>, <span class=\"sym-9037 sym\">filter</span>);"],
- [329, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-9186 sym\">e</span>) {"],
- [330, " <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9186 sym\">e</span>);"],
- [331, " }"],
- [332, " }"],
- [333, ""],
- [334, " <span class=\"cppd\">/**</span>"],
- [335, "<span class=\"cppd\"> * Lazy-loading values</span>"],
- [336, "<span class=\"cppd\"> */</span>"],
- [337, " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-9292 sym\">values</span>() {"],
- [338, " <span class=\"k\">try </span>{"],
- [339, " <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [340, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-9371 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
- [341, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9430 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
- [342, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span><V>(<span class=\"sym-9371 sym\">iteratorExchange</span>, <span class=\"sym-9430 sym\">filter</span>);"],
- [343, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-9562 sym\">e</span>) {"],
- [344, " <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9562 sym\">e</span>);"],
- [345, " }"],
- [346, " }"],
- [347, ""],
- [348, " <span class=\"k\">public </span>Iterable<<span class=\"sym-13607 sym\">Entry</span><V>> <span class=\"sym-9638 sym\">entries</span>() {"],
- [349, " <span class=\"sym-1522 sym\">exchange</span>.clear().to(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [350, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9701 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
- [351, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span><V>(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9701 sym\">filter</span>);"],
- [352, " }"],
- [353, ""],
- [354, " <span class=\"k\">public </span>Iterable<<span class=\"sym-13607 sym\">Entry</span><V>> <span class=\"sym-9847 sym\">entries</span>(Object <span class=\"sym-9862 sym\">firstKey</span>) {"],
- [355, " <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-9862 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
- [356, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9946 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-9862 sym\">firstKey</span>));"],
- [357, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span><V>(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9946 sym\">filter</span>);"],
- [358, " }"],
- [359, ""],
- [360, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10096 sym\">resetKey</span>(Object <span class=\"sym-10112 sym\">key</span>) {"],
- [361, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [362, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10112 sym\">key</span>);"],
- [363, " }"],
- [364, ""],
- [365, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10187 sym\">resetKey</span>(Object <span class=\"sym-10203 sym\">first</span>, Object <span class=\"sym-10217 sym\">second</span>) {"],
- [366, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [367, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10203 sym\">first</span>).append(<span class=\"sym-10217 sym\">second</span>);"],
- [368, " }"],
- [369, ""],
- [370, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10312 sym\">resetKey</span>(Object <span class=\"sym-10328 sym\">first</span>, Object <span class=\"sym-10342 sym\">second</span>, Object <span class=\"sym-10357 sym\">third</span>) {"],
- [371, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [372, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10328 sym\">first</span>).append(<span class=\"sym-10342 sym\">second</span>).append(<span class=\"sym-10357 sym\">third</span>);"],
- [373, " }"],
- [374, ""],
- [375, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10465 sym\">resetKey</span>(Object[] <span class=\"sym-10483 sym\">keys</span>) {"],
- [376, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
- [377, " <span class=\"k\">for </span>(Object <span class=\"sym-10529 sym\">o</span> : <span class=\"sym-10483 sym\">keys</span>) {"],
- [378, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10529 sym\">o</span>);"],
- [379, " }"],
- [380, " }"],
- [381, ""],
- [382, " <span class=\"cppd\">//</span>"],
- [383, " <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>"],
- [384, " <span class=\"cppd\">//</span>"],
- [385, ""],
- [386, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10646 sym\">ValueIterable</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span>Iterable<T> {"],
- [387, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1237 sym\">Iterator</span><T> <span class=\"sym-10739 sym\">iterator</span>;"],
- [388, ""],
- [389, " <span class=\"k\">private </span><span class=\"sym-10762 sym\">ValueIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-10805 sym\">keyFilter</span>) {"],
- [390, " <span class=\"k\">this</span>.<span class=\"sym-10739 sym\">iterator</span> = <span class=\"k\">new </span><span class=\"sym-10997 sym\">ValueIterator</span><T>(<span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-10805 sym\">keyFilter</span>);"],
- [391, " }"],
- [392, ""],
- [393, " <span class=\"a\">@Override</span>"],
- [394, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span><T> <span class=\"sym-10927 sym\">iterator</span>() {"],
- [395, " <span class=\"k\">return </span><span class=\"sym-10739 sym\">iterator</span>;"],
- [396, " }"],
- [397, " }"],
- [398, ""],
- [399, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10997 sym\">ValueIterator</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span><T> {"],
- [400, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11087 sym\">exchange</span>;"],
- [401, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11125 sym\">keyFilter</span>;"],
- [402, ""],
- [403, " <span class=\"k\">private </span><span class=\"sym-11149 sym\">ValueIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11172 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11192 sym\">keyFilter</span>) {"],
- [404, " <span class=\"k\">this</span>.<span class=\"sym-11087 sym\">exchange</span> = <span class=\"sym-11172 sym\">exchange</span>;"],
- [405, " <span class=\"k\">this</span>.<span class=\"sym-11125 sym\">keyFilter</span> = <span class=\"sym-11192 sym\">keyFilter</span>;"],
- [406, " }"],
- [407, ""],
- [408, " <span class=\"a\">@Override</span>"],
- [409, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-11311 sym\">hasNext</span>() {"],
- [410, " <span class=\"k\">try </span>{"],
- [411, " <span class=\"k\">return </span><span class=\"sym-11087 sym\">exchange</span>.hasNext(<span class=\"sym-11125 sym\">keyFilter</span>);"],
- [412, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11413 sym\">e</span>) {"],
- [413, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11413 sym\">e</span>);"],
- [414, " }"],
- [415, " }"],
- [416, ""],
- [417, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
- [418, " <span class=\"a\">@Override</span>"],
- [419, "<span class=\"a\"> </span><span class=\"k\">public </span>T <span class=\"sym-11539 sym\">next</span>() {"],
- [420, " <span class=\"k\">try </span>{"],
- [421, " <span class=\"sym-11087 sym\">exchange</span>.next(<span class=\"sym-11125 sym\">keyFilter</span>);"],
- [422, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11628 sym\">e</span>) {"],
- [423, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11628 sym\">e</span>);"],
- [424, " }"],
- [425, " <span class=\"k\">if </span>(<span class=\"sym-11087 sym\">exchange</span>.getValue().isDefined()) {"],
- [426, " <span class=\"k\">return </span>(T) <span class=\"sym-11087 sym\">exchange</span>.getValue().get();"],
- [427, " }"],
- [428, " <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
- [429, " }"],
- [430, ""],
- [431, " <span class=\"a\">@Override</span>"],
- [432, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-11863 sym\">remove</span>() {"],
- [433, " <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
- [434, " }"],
- [435, " }"],
- [436, ""],
- [437, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-11992 sym\">EntryIterable</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span>Iterable<<span class=\"sym-13607 sym\">Entry</span><T>> {"],
- [438, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-12339 sym\">EntryIterator</span><T> <span class=\"sym-12097 sym\">it</span>;"],
- [439, ""],
- [440, " <span class=\"k\">private </span><span class=\"sym-12114 sym\">EntryIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12157 sym\">keyFilter</span>) {"],
- [441, " <span class=\"sym-12097 sym\">it</span> = <span class=\"k\">new </span><span class=\"sym-12339 sym\">EntryIterator</span><T>(<span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-12157 sym\">keyFilter</span>);"],
- [442, " }"],
- [443, ""],
- [444, " <span class=\"a\">@Override</span>"],
- [445, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span><<span class=\"sym-13607 sym\">Entry</span><T>> <span class=\"sym-12275 sym\">iterator</span>() {"],
- [446, " <span class=\"k\">return </span><span class=\"sym-12097 sym\">it</span>;"],
- [447, " }"],
- [448, " }"],
- [449, ""],
- [450, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-12339 sym\">EntryIterator</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span><<span class=\"sym-13607 sym\">Entry</span><T>> {"],
- [451, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12436 sym\">exchange</span>;"],
- [452, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12474 sym\">keyFilter</span>;"],
- [453, ""],
- [454, " <span class=\"k\">private </span><span class=\"sym-12498 sym\">EntryIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12521 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12541 sym\">keyFilter</span>) {"],
- [455, " <span class=\"k\">this</span>.<span class=\"sym-12436 sym\">exchange</span> = <span class=\"sym-12521 sym\">exchange</span>;"],
- [456, " <span class=\"k\">this</span>.<span class=\"sym-12474 sym\">keyFilter</span> = <span class=\"sym-12541 sym\">keyFilter</span>;"],
- [457, " }"],
- [458, ""],
- [459, " <span class=\"a\">@Override</span>"],
- [460, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-12660 sym\">hasNext</span>() {"],
- [461, " <span class=\"k\">try </span>{"],
- [462, " <span class=\"k\">return </span><span class=\"sym-12436 sym\">exchange</span>.hasNext(<span class=\"sym-12474 sym\">keyFilter</span>);"],
- [463, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12762 sym\">e</span>) {"],
- [464, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12762 sym\">e</span>);"],
- [465, " }"],
- [466, " }"],
- [467, ""],
- [468, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
- [469, " <span class=\"a\">@Override</span>"],
- [470, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-13607 sym\">Entry</span><T> <span class=\"sym-12895 sym\">next</span>() {"],
- [471, " <span class=\"k\">try </span>{"],
- [472, " <span class=\"sym-12436 sym\">exchange</span>.next(<span class=\"sym-12474 sym\">keyFilter</span>);"],
- [473, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12984 sym\">e</span>) {"],
- [474, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12984 sym\">e</span>);"],
- [475, " }"],
- [476, " <span class=\"k\">if </span>(<span class=\"sym-12436 sym\">exchange</span>.getValue().isDefined()) {"],
- [477, " T <span class=\"sym-13096 sym\">value</span> = (T) <span class=\"sym-12436 sym\">exchange</span>.getValue().get();"],
- [478, " <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-13147 sym\">key</span> = <span class=\"sym-12436 sym\">exchange</span>.getKey();"],
- [479, " Object[] <span class=\"sym-13189 sym\">array</span> = <span class=\"k\">new </span>Object[<span class=\"sym-13147 sym\">key</span>.getDepth()];"],
- [480, " <span class=\"k\">for </span>(<span class=\"k\">int </span><span class=\"sym-13242 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-13242 sym\">i</span> < <span class=\"sym-13147 sym\">key</span>.getDepth(); <span class=\"sym-13242 sym\">i</span>++) {"],
- [481, " <span class=\"sym-13189 sym\">array</span>[<span class=\"sym-13242 sym\">i</span>] = <span class=\"sym-13147 sym\">key</span>.indexTo(<span class=\"sym-13242 sym\">i</span> - <span class=\"sym-13147 sym\">key</span>.getDepth()).decode();"],
- [482, " }"],
- [483, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-13607 sym\">Entry</span><T>(<span class=\"sym-13189 sym\">array</span>, <span class=\"sym-13096 sym\">value</span>);"],
- [484, " }"],
- [485, " <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
- [486, " }"],
- [487, ""],
- [488, " <span class=\"a\">@Override</span>"],
- [489, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-13479 sym\">remove</span>() {"],
- [490, " <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
- [491, " }"],
- [492, " }"],
- [493, ""],
- [494, " <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-13607 sym\">Entry</span><V <span class=\"k\">extends </span>Serializable> {"],
- [495, " <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-13666 sym\">key</span>;"],
- [496, " <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-13691 sym\">value</span>;"],
- [497, ""],
- [498, " <span class=\"sym-13703 sym\">Entry</span>(Object[] <span class=\"sym-13718 sym\">key</span>, V <span class=\"sym-13725 sym\">value</span>) {"],
- [499, " <span class=\"k\">this</span>.<span class=\"sym-13666 sym\">key</span> = <span class=\"sym-13718 sym\">key</span>;"],
- [500, " <span class=\"k\">this</span>.<span class=\"sym-13691 sym\">value</span> = <span class=\"sym-13725 sym\">value</span>;"],
- [501, " }"],
- [502, ""],
- [503, " <span class=\"k\">public </span>Object[] <span class=\"sym-13809 sym\">key</span>() {"],
- [504, " <span class=\"k\">return </span><span class=\"sym-13666 sym\">key</span>;"],
- [505, " }"],
- [506, ""],
- [507, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
- [508, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-13873 sym\">value</span>() {"],
- [509, " <span class=\"k\">return </span><span class=\"sym-13691 sym\">value</span>;"],
- [510, " }"],
- [511, ""],
- [512, " <span class=\"a\">@Override</span>"],
- [513, "<span class=\"a\"> </span><span class=\"k\">public </span>String <span class=\"sym-13942 sym\">toString</span>() {"],
- [514, " <span class=\"k\">return </span><span class=\"sym-1134 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);"],
- [515, " }"],
- [516, " }"],
- [517, ""],
- [518, "}"],
- [519, ""]
-]}
+++ /dev/null
-{"tests": [
- {
- "name": "should_update_existing_issue",
- "status": "OK",
- "durationInMs": 293,
- "_ref": "1"
- },
- {
- "name": "testDistributionMeasure",
- "status": "OK",
- "durationInMs": 148,
- "_ref": "2"
- },
- {
- "name": "one_part_key",
- "status": "OK",
- "durationInMs": 96,
- "_ref": "3"
- },
- {
- "name": "testIssueExclusion",
- "status": "OK",
- "durationInMs": 305,
- "_ref": "4"
- },
- {
- "name": "should_add_measure_with_same_metric",
- "status": "OK",
- "durationInMs": 141,
- "_ref": "5"
- },
- {
- "name": "should_create_cache",
- "status": "OK",
- "durationInMs": 81,
- "_ref": "6"
- },
- {
- "name": "scanProjectWithMixedSourcesAndTests",
- "status": "OK",
- "durationInMs": 239,
- "_ref": "7"
- },
- {
- "name": "remove_versus_clear",
- "status": "OK",
- "durationInMs": 111,
- "_ref": "3"
- },
- {
- "name": "should_persist_component_data",
- "status": "OK",
- "durationInMs": 132,
- "_ref": "8"
- },
- {
- "name": "scanProjectWithSourceDir",
- "status": "OK",
- "durationInMs": 212,
- "_ref": "7"
- },
- {
- "name": "should_add_measure_with_too_big_data_for_persistit",
- "status": "OK",
- "durationInMs": 336,
- "_ref": "5"
- },
- {
- "name": "failForDuplicateInputFile",
- "status": "OK",
- "durationInMs": 127,
- "_ref": "7"
- },
- {
- "name": "should_not_create_cache_twice",
- "status": "OK",
- "durationInMs": 101,
- "_ref": "6"
- },
- {
- "name": "should_get_and_set_data",
- "status": "OK",
- "durationInMs": 190,
- "_ref": "9"
- },
- {
- "name": "should_add_input_file",
- "status": "OK",
- "durationInMs": 122,
- "_ref": "10"
- },
- {
- "name": "scanTempProject",
- "status": "OK",
- "durationInMs": 345,
- "_ref": "4"
- },
- {
- "name": "should_get_measures",
- "status": "OK",
- "durationInMs": 114,
- "_ref": "5"
- },
- {
- "name": "test_key_being_prefix_of_another_key",
- "status": "OK",
- "durationInMs": 94,
- "_ref": "3"
- },
- {
- "name": "should_add_measure_with_big_data",
- "status": "OK",
- "durationInMs": 242,
- "_ref": "5"
- },
- {
- "name": "should_get_all_issues",
- "status": "OK",
- "durationInMs": 104,
- "_ref": "1"
- },
- {
- "name": "should_add_measure",
- "status": "OK",
- "durationInMs": 117,
- "_ref": "5"
- },
- {
- "name": "computeMeasuresOnSampleProject",
- "status": "OK",
- "durationInMs": 315,
- "_ref": "2"
- },
- {
- "name": "test_measure_coder",
- "status": "OK",
- "durationInMs": 110,
- "_ref": "5"
- },
- {
- "name": "should_add_measure_with_too_big_data_for_persistit_pre_patch",
- "status": "OK",
- "durationInMs": 821,
- "_ref": "5"
- },
- {
- "name": "three_parts_key",
- "status": "OK",
- "durationInMs": 122,
- "_ref": "3"
- },
- {
- "name": "two_parts_key",
- "status": "OK",
- "durationInMs": 118,
- "_ref": "3"
- },
- {
- "name": "should_add_new_issue",
- "status": "OK",
- "durationInMs": 95,
- "_ref": "1"
- },
- {
- "name": "empty_cache",
- "status": "OK",
- "durationInMs": 104,
- "_ref": "3"
- },
- {
- "name": "scanProjectWithTestDir",
- "status": "OK",
- "durationInMs": 322,
- "_ref": "7"
- },
- {
- "name": "scanSampleProject",
- "status": "OK",
- "durationInMs": 184,
- "_ref": "4"
- },
- {
- "name": "computeMeasuresOnTempProject",
- "status": "OK",
- "durationInMs": 274,
- "_ref": "2"
- },
- {
- "name": "should_get_and_set_string_data",
- "status": "OK",
- "durationInMs": 95,
- "_ref": "9"
- }
-], "files": {
- "3": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CacheTest.java",
- "longName": "src/test/java/org/sonar/batch/index/CacheTest.java"
- },
- "1": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/issue/IssueCacheTest.java",
- "longName": "src/test/java/org/sonar/batch/issue/IssueCacheTest.java"
- },
- "4": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java",
- "longName": "src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java"
- },
- "2": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java",
- "longName": "src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java"
- },
- "8": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java",
- "longName": "src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java"
- },
- "9": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java",
- "longName": "src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java"
- },
- "10": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java",
- "longName": "src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java"
- },
- "7": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java",
- "longName": "src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java"
- },
- "5": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java",
- "longName": "src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java"
- },
- "6": {
- "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CachesTest.java",
- "longName": "src/test/java/org/sonar/batch/index/CachesTest.java"
- }
-}}
+++ /dev/null
-{"key": "com.sonarsource.it.samples:sample-with-tests:src/test/java/sample/SampleTest.java", "path": "src/test/java/sample/SampleTest.java", "name": "SampleTest.java", "longName": "src/test/java/sample/SampleTest.java", "q": "UTS", "project": "com.sonarsource.it.samples:sample-with-tests", "projectName": "Sonar :: Integration Tests :: Sample with tests", "fav": false, "canMarkAsFavourite": false, "canBulkChange": false, "canCreateManualIssue": false, "periods": [], "severities": [], "rules": [], "measures": {
- "fTests": "2",
- "fIssues": "0"
-}}
+++ /dev/null
-{"files": [
- {
- "key": "com.sonarsource.it.samples:sample-with-tests:src/main/java/sample/Sample.java",
- "longName": "src/main/java/sample/Sample.java",
- "coveredLines": 5
- }
-]}
+++ /dev/null
-[
- {
- "id": 5,
- "key": "com.sonarsource.it.samples:sample-with-tests:src/test/java/sample/SampleTest.java",
- "name": "SampleTest.java",
- "scope": "FIL",
- "qualifier": "UTS",
- "date": "2014-07-24T10:57:16+0200",
- "creationDate": "2014-07-24T10:57:17+0200",
- "lname": "src/test/java/sample/SampleTest.java",
- "lang": "java",
- "msr": [
- {
- "key": "tests",
- "val": 2.0,
- "frmt_val": "2"
- },
- {
- "key": "test_execution_time",
- "val": 12.0,
- "frmt_val": "12 ms"
- }
- ]
- }
-]
+++ /dev/null
-{"sources": [
- [1, "<span class=\"k\">package</span> sample;"],
- [2, ""],
- [3, "<span class=\"k\">import</span> org.hamcrest.CoreMatchers;"],
- [4, "<span class=\"k\">import</span> org.junit.Test;"],
- [5, ""],
- [6, "<span class=\"k\">import</span> <span class=\"k\">static</span> org.junit.Assert.assertThat;"],
- [7, ""],
- [8, "<span class=\"k\">public</span> <span class=\"k\">class</span> SampleTest {"],
- [9, ""],
- [10, " <span class=\"a\">@Test</span>"],
- [11, " <span class=\"k\">public</span> <span class=\"k\">void</span> should_return_i() {"],
- [12, " Sample sample = <span class=\"k\">new</span> Sample(1);"],
- [13, " assertThat(sample.getI(), CoreMatchers.is(1));"],
- [14, " }"],
- [15, ""],
- [16, " <span class=\"a\">@Test</span>"],
- [17, " <span class=\"k\">public</span> <span class=\"k\">void</span> should_return_to_string() {"],
- [18, " assertThat(<span class=\"k\">new</span> Sample(1).toString(), CoreMatchers.is(<span class=\"s\">\"1\"</span>));"],
- [19, " }"],
- [20, ""],
- [21, "}"],
- [22, ""]
-]}
+++ /dev/null
-{"tests": [
- {
- "name": "should_return_to_string",
- "status": "OK",
- "durationInMs": 1,
- "coveredLines": 4
- },
- {
- "name": "should_return_i",
- "status": "OK",
- "durationInMs": 11,
- "coveredLines": 5
- }
-]}
+/* globals casper: false */
+
var lib = require('../lib'),
testName = lib.testName('Issues');
test.done();
});
});
+
+
+casper.test.begin(testName('File-Level Issues'), function (test) {
+ var issueKey = '200d4a8b-9666-4e70-9953-7bab57933f97',
+ issueSelector = '.issue[data-key="' + issueKey + '"]';
+
+ casper
+ .start(lib.buildUrl('issues'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+ lib.mockRequestFromFile('/api/issues/search', 'file-level/search.json');
+ lib.mockRequestFromFile('/api/components/app', 'file-level/components-app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'file-level/lines.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector(issueSelector, function () {
+ casper.click(issueSelector + ' .js-issue-navigate');
+ });
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-viewer ' + issueSelector, function () {
+ test.assertSelectorContains('.source-viewer ' + issueSelector, '1 duplicated blocks of code');
+ });
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
+
+
+casper.test.begin(testName('Status Facet'), function (test) {
+ casper
+ .start(lib.buildUrl('issues'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+ lib.mockRequestFromFile('/api/issues/search', 'search-reopened.json', { data: { statuses: 'REOPENED' } });
+ lib.mockRequestFromFile('/api/issues/search', 'search.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.facet[data-value=REOPENED]', function () {
+ casper.click('.facet[data-value=REOPENED]');
+ });
+ })
+
+ .then(function () {
+ lib.waitForElementCount('.issue', 4, function () {
+ test.assertElementCount('.issue .icon-status-reopened', 4);
+ });
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
+
+
+casper.test.begin(testName('Bulk Change'), function (test) {
+ casper
+ .start(lib.buildUrl('issues'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+ lib.mockRequestFromFile('/api/issues/search', 'search.json');
+ lib.mockRequest('/issues/bulk_change_form?resolved=false',
+ '<div id="bulk-change-form">bulk change form</div>', { contentType: 'text/plain' });
+ })
+
+ .then(function () {
+ casper.waitForSelector('.issue', function () {
+ casper.waitForSelector('#issues-bulk-change');
+ });
+ })
+
+ .then(function () {
+ casper.click('#issues-bulk-change');
+ casper.waitForSelector('#bulk-change-form', function () {
+ test.assertSelectorContains('#bulk-change-form', 'bulk change form');
+ });
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
--- /dev/null
+{
+ "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "path": "src/main/java/org/sonar/api/measures/Measure.java",
+ "name": "Measure.java",
+ "longName": "src/main/java/org/sonar/api/measures/Measure.java",
+ "q": "FIL",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "subProjectName": "SonarQube :: Plugin API",
+ "project": "org.codehaus.sonar:sonar",
+ "projectName": "SonarQube",
+ "fav": false,
+ "canMarkAsFavourite": false,
+ "canBulkChange": false,
+ "canCreateManualIssue": false,
+ "periods": [
+ [
+ 1,
+ "since previous analysis (2014 Dec 01)",
+ "2014-12-01T18:51:13+0100"
+ ],
+ [
+ 2,
+ "over 365 days (2013 Dec 01)",
+ "2013-12-01T00:40:31+0100"
+ ],
+ [
+ 3,
+ "since previous version (4.5 - 2014 Sep 03)",
+ "2014-09-03T23:16:52+0200"
+ ]
+ ],
+ "severities": [
+ [
+ "MAJOR",
+ "Major",
+ 10
+ ],
+ [
+ "INFO",
+ "Info",
+ 3
+ ]
+ ],
+ "rules": [
+ [
+ "common-java:DuplicatedBlocks",
+ "Duplicated blocks",
+ 1
+ ],
+ [
+ "squid:S1698",
+ "Objects should be compared with \"equals()\"",
+ 1
+ ],
+ [
+ "squid:MethodCyclomaticComplexity",
+ "Methods should not be too complex",
+ 3
+ ],
+ [
+ "squid:S1142",
+ "Methods should not contain too many return statements",
+ 2
+ ],
+ [
+ "squid:S1067",
+ "Expressions should not be too complex",
+ 1
+ ],
+ [
+ "squid:S1151",
+ "Switch cases should not have too many lines",
+ 1
+ ],
+ [
+ "common-java:InsufficientBranchCoverage",
+ "Insufficient branch coverage by unit tests",
+ 1
+ ],
+ [
+ "squid:S1133",
+ "Deprecated code should be removed eventually",
+ 3
+ ]
+ ],
+ "measures": {
+ "fNcloc": "396",
+ "fCoverage": "65.0%",
+ "fDuplicationDensity": "2.6%",
+ "fDebt": "5h 42min",
+ "fSqaleRating": "A",
+ "fSqaleDebtRatio": "2.9%",
+ "fIssues": "13",
+ "fMajorIssues": "10",
+ "fInfoIssues": "3"
+ },
+ "tabs": [
+ "scm",
+ "coverage",
+ "duplications"
+ ],
+ "manual_rules": [
+ {
+ "key": "manual:api",
+ "name": "API"
+ },
+ {
+ "key": "manual:design",
+ "name": "Design"
+ },
+ {
+ "key": "manual:error_handling",
+ "name": "Error handling"
+ },
+ {
+ "key": "manual:performance",
+ "name": "Performance"
+ },
+ {
+ "key": "manual:sql_pitfalls",
+ "name": "SQL Pitfall"
+ }
+ ]
+}
--- /dev/null
+{
+ "sources": [
+ {
+ "line": 1,
+ "code": "<span class=\"cppd\">/*</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "aeadc1f9129274949daaa57738c7c4550bdfbc7b",
+ "scmDate": "2010-09-06T16:08:06+0200"
+ }
+ ]
+}
--- /dev/null
+{
+ "total": 10,
+ "p": 1,
+ "ps": 50,
+ "projects": [
+ {
+ "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+ "key": "org.codehaus.sonar:sonar",
+ "id": 2865,
+ "qualifier": "TRK",
+ "name": "SonarQube",
+ "longName": "SonarQube"
+ }
+ ],
+ "components": [
+ {
+ "uuid": "7feef7c3-11b9-4175-b5a7-527ca3c75cb7",
+ "key": "org.codehaus.sonar:sonar-plugin-api",
+ "id": 16,
+ "enabled": true,
+ "qualifier": "BRC",
+ "name": "SonarQube :: Plugin API",
+ "longName": "SonarQube :: Plugin API",
+ "path": "sonar-plugin-api",
+ "projectId": 2865,
+ "subProjectId": 2865
+ },
+ {
+ "uuid": "e1b3c47e-e9a2-42ea-9cac-439ce2345d7e",
+ "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Metric.java",
+ "id": 3543,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "Metric.java",
+ "longName": "src/main/java/org/sonar/api/measures/Metric.java",
+ "path": "src/main/java/org/sonar/api/measures/Metric.java",
+ "projectId": 2865,
+ "subProjectId": 16
+ },
+ {
+ "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+ "key": "org.codehaus.sonar:sonar",
+ "id": 2865,
+ "enabled": true,
+ "qualifier": "TRK",
+ "name": "SonarQube",
+ "longName": "SonarQube"
+ },
+ {
+ "uuid": "e2550527-3f86-4082-a9ae-e345f5a735aa",
+ "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "id": 3538,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "Measure.java",
+ "longName": "src/main/java/org/sonar/api/measures/Measure.java",
+ "path": "src/main/java/org/sonar/api/measures/Measure.java",
+ "projectId": 2865,
+ "subProjectId": 16
+ },
+ {
+ "uuid": "97606f40-f3ef-4922-aa37-f67485917e67",
+ "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/resources/File.java",
+ "id": 3592,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "File.java",
+ "longName": "src/main/java/org/sonar/api/resources/File.java",
+ "path": "src/main/java/org/sonar/api/resources/File.java",
+ "projectId": 2865,
+ "subProjectId": 16
+ },
+ {
+ "uuid": "69949290-cfe6-45b6-9dd0-53f1e467b810",
+ "key": "org.codehaus.sonar:sonar-duplications",
+ "id": 20,
+ "enabled": true,
+ "qualifier": "BRC",
+ "name": "SonarQube :: Duplications",
+ "longName": "SonarQube :: Duplications",
+ "path": "sonar-duplications",
+ "projectId": 2865,
+ "subProjectId": 2865
+ },
+ {
+ "uuid": "90dd5fda-5fce-4d76-bebf-132922abad95",
+ "key": "org.codehaus.sonar:sonar-duplications:src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
+ "id": 3308,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "PackedMemoryCloneIndex.java",
+ "longName": "src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
+ "path": "src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
+ "projectId": 2865,
+ "subProjectId": 20
+ },
+ {
+ "uuid": "1b915447-5aa8-4f59-9134-346a4e88c7b7",
+ "key": "org.codehaus.sonar.plugins:sonar-core-plugin",
+ "id": 2873,
+ "enabled": true,
+ "qualifier": "BRC",
+ "name": "SonarQube :: Plugins :: Core",
+ "longName": "SonarQube :: Plugins :: Core",
+ "path": "plugins/sonar-core-plugin",
+ "projectId": 2865,
+ "subProjectId": 2865
+ },
+ {
+ "uuid": "6c9c1986-59b3-4839-8dec-9499488f64d1",
+ "key": "org.codehaus.sonar.plugins:sonar-core-plugin:src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
+ "id": 20777,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "StringTextComparator.java",
+ "longName": "src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
+ "path": "src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
+ "projectId": 2865,
+ "subProjectId": 2873
+ }
+ ],
+ "issues": [
+ {
+ "key": "200d4a8b-9666-4e70-9953-7bab57933f97",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "common-java:DuplicatedBlocks",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "1 duplicated blocks of code.",
+ "debt": "1h",
+ "creationDate": "2014-06-06T23:38:06+0200",
+ "updateDate": "2014-07-01T17:51:37+0200",
+ "fUpdateAge": "5 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "23c5a022-ab5b-4892-b676-a7fd58540f79",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "common-java:InsufficientBranchCoverage",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+ "debt": "10min",
+ "creationDate": "2014-09-02T09:25:36+0200",
+ "updateDate": "2014-10-09T16:21:48+0200",
+ "fUpdateAge": "about a month",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "23d6cd5e-83ba-4e65-abef-ff8592195638",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:S1142",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "Reduce the number of returns of this method 7, down to the maximum allowed 5.",
+ "line": 248,
+ "debt": "20min",
+ "author": "julien.henry@sonarsource.com",
+ "creationDate": "2014-06-16T23:38:20+0200",
+ "updateDate": "2014-07-01T18:26:25+0200",
+ "fUpdateAge": "5 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "8c5a4fca-57c9-44ad-89c0-6673c483e357",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:MethodCyclomaticComplexity",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "The Cyclomatic Complexity of this method \"value\" is 22 which is greater than 10 authorized.",
+ "line": 248,
+ "debt": "10min",
+ "author": "julien.henry@sonarsource.com",
+ "creationDate": "2014-06-16T23:38:20+0200",
+ "updateDate": "2014-07-01T16:20:08+0200",
+ "fUpdateAge": "5 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "57303136-93b5-4d96-b1ca-654160aa5bdb",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:S1151",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "Reduce this switch case number of lines from 8 to at most 5, for example by extracting code into methods.",
+ "line": 266,
+ "debt": "10min",
+ "author": "julien.henry@sonarsource.com",
+ "creationDate": "2014-06-16T23:38:20+0200",
+ "updateDate": "2014-06-30T16:41:24+0200",
+ "fUpdateAge": "5 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "dbf052eb-f991-44db-a829-029d47b7fe2d",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:MethodCyclomaticComplexity",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "The Cyclomatic Complexity of this method \"getVariation\" is 12 which is greater than 10 authorized.",
+ "line": 562,
+ "debt": "10min",
+ "author": "Simon Brandhof",
+ "creationDate": "2011-10-25T12:27:40+0200",
+ "updateDate": "2013-12-18T23:54:49+0100",
+ "fUpdateAge": "11 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "50db1415-bd3c-4c24-ab0a-763177059770",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:S1698",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "Change this comparison to use the equals method.",
+ "line": 684,
+ "debt": "2min",
+ "author": "david@gageot.net",
+ "creationDate": "2014-06-26T23:17:10+0200",
+ "updateDate": "2014-07-01T16:13:48+0200",
+ "fUpdateAge": "5 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "5fbdc597-0d83-4ea2-9d9d-ac192ec1eec1",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:S1067",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "Reduce the number of conditional operators (5) used in the expression (maximum allowed 3).",
+ "line": 684,
+ "debt": "10min",
+ "author": "david@gageot.net",
+ "creationDate": "2013-08-28T12:19:16+0200",
+ "updateDate": "2013-12-10T14:28:37+0100",
+ "fUpdateAge": "12 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "186d1419-f5e9-412f-8a8e-f8cd81920359",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:MethodCyclomaticComplexity",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "The Cyclomatic Complexity of this method \"equals\" is 15 which is greater than 10 authorized.",
+ "line": 724,
+ "debt": "10min",
+ "author": "Simon Brandhof",
+ "creationDate": "2011-10-25T12:27:40+0200",
+ "updateDate": "2014-03-12T10:43:19+0100",
+ "fUpdateAge": "9 months",
+ "actions": [],
+ "transitions": []
+ },
+ {
+ "key": "225d3b74-8b61-46a1-aac2-68221d6cd933",
+ "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure_2.java",
+ "componentId": 3538,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-plugin-api",
+ "rule": "squid:S1142",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "Reduce the number of returns of this method 6, down to the maximum allowed 5.",
+ "line": 724,
+ "debt": "20min",
+ "author": "simon.brandhof@gmail.com",
+ "creationDate": "2013-08-09T16:04:33+0200",
+ "updateDate": "2014-03-12T10:43:19+0100",
+ "fUpdateAge": "9 months",
+ "actions": [],
+ "transitions": []
+ }
+ ],
+ "rules": [
+ {
+ "key": "squid:S1698",
+ "name": "Objects should be compared with \"equals()\"",
+ "lang": "java",
+ "desc": "<p>Using the equality (<code>==</code>) and inequality (<code>!=</code>) operators to compare two objects does not check to see if they have the same values. Rather it checks to see if both object references point to exactly the same object in memory. The vast majority of the time, this is not what you want to do. Use the .equals() method to compare the values of two objects or to compare a string object to a string literal.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1 == str2)\n{\n System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == \"blue\")\n{\n System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == str3)\n{\n System.out.println(\"they're the same object\"); // this prints\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1.equals(str2))\n{\n System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1.equals(\"blue\"))\n{\n System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1 == str3)\n{\n System.out.println(\"they're the same object\"); // this still prints, but it's probably not what you meant to do\n}\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "common-java:DuplicatedBlocks",
+ "name": "Duplicated blocks",
+ "lang": "java",
+ "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:MethodCyclomaticComplexity",
+ "name": "Methods should not be too complex",
+ "lang": "java",
+ "desc": "<p>The Cyclomatic Complexity is measured by the number of\n\t(&&, ||) operators and (if, while, do, for, ?:, catch, switch,\n\tcase, return, throw) statements in the body of a class plus one for\n\teach constructor, method (but not getter/setter), static initializer,\n\tor instance initializer in the class. The last return stament in\n\tmethod, if exists, is not taken into account.</p>\n<p>\n\tEven when the Cyclomatic Complexity of a class is very high, this\n\tcomplexity might be well distributed among all methods. Nevertheless,\n\tmost of the time, a very complex class is a class which breaks the <a\n\t\thref=\"http://en.wikipedia.org/wiki/Single_responsibility_principle\">Single\n\t\tResponsibility Principle</a> and which should be re-factored to be split\n\tin several classes.\n</p>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S1142",
+ "name": "Methods should not contain too many return statements",
+ "lang": "java",
+ "desc": "<p>\nHaving too many return statements in a method increases the method's essential complexity because the flow of execution is broken each time a return statement is encountered.\nThis makes it harder to read and understand the logic of the method.\n</p>\n\n<p>\nThe following code snippet illustrates this rule with the default threshold of 3:\n</p>\n\n<pre>\npublic boolean myMethod() { // Non-Compliant as there are 4 return statements\n if (condition1) {\n return true;\n } else {\n if (condition2) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n}\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S1067",
+ "name": "Expressions should not be too complex",
+ "lang": "java",
+ "desc": "<p>\nThe complexity of an expression is defined by the number of <code>&&</code>, <code>||</code> and <code>condition ? ifTrue : ifFalse</code> operators it contains.\nA single expression's complexity should not become too high to keep the code readable.\n</p>\n\n<p>The following code, with a maximum complexity of 3:</p>\n\n<pre>\nif (condition1 && condition2 && condition3 && condition4) { /* ... */ } // Non-Compliant\n</pre>\n\n<p>could be refactored into something like:</p>\n\n<pre>\nif (relevantMethodName1() && relevantMethodName2()) { /* ... */ } // Compliant\n\n/* ... */\n\nprivate boolean relevantMethodName1() {\n return condition1 && condition2;\n}\n\nprivate boolean relevantMethodName2() {\n return condition3 && condition4;\n}\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S1151",
+ "name": "Switch cases should not have too many lines",
+ "lang": "java",
+ "desc": "<p>Switch cases should remain small to keep the overall switch compact and readable.</p>\n\n<p>The following code snippet illustrates this rule with the default threshold of 5:</p>\n\n<pre>\nswitch (myVariable) {\n case 0: // Compliant - 5 lines till following case\n System.out.println(\"\");\n System.out.println(\"\");\n System.out.println(\"\");\n break;\n default: // Non-Compliant - 6 lines till switch end\n System.out.println(\"\");\n System.out.println(\"\");\n System.out.println(\"\");\n System.out.println(\"\");\n break;\n}\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "common-java:InsufficientBranchCoverage",
+ "name": "Insufficient branch coverage by unit tests",
+ "lang": "java",
+ "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
+ "status": "READY",
+ "langName": "Java"
+ }
+ ],
+ "users": [],
+ "languages": [
+ {
+ "key": "js",
+ "name": "JavaScript"
+ },
+ {
+ "key": "java",
+ "name": "Java"
+ }
+ ],
+ "maxResultsReached": false,
+ "paging": {
+ "pageIndex": 1,
+ "pageSize": 50,
+ "total": 10,
+ "fTotal": "10",
+ "pages": 1
+ },
+ "facets": [
+ {
+ "property": "severities",
+ "values": [
+ {
+ "val": "MAJOR",
+ "count": 10
+ },
+ {
+ "val": "INFO",
+ "count": 3
+ },
+ {
+ "val": "MINOR",
+ "count": 0
+ },
+ {
+ "val": "CRITICAL",
+ "count": 0
+ },
+ {
+ "val": "BLOCKER",
+ "count": 0
+ }
+ ]
+ },
+ {
+ "property": "statuses",
+ "values": [
+ {
+ "val": "CONFIRMED",
+ "count": 10
+ },
+ {
+ "val": "OPEN",
+ "count": 0
+ },
+ {
+ "val": "REOPENED",
+ "count": 0
+ },
+ {
+ "val": "RESOLVED",
+ "count": 0
+ },
+ {
+ "val": "CLOSED",
+ "count": 0
+ }
+ ]
+ },
+ {
+ "property": "resolutions",
+ "values": [
+ {
+ "val": "REMOVED",
+ "count": 43
+ },
+ {
+ "val": "FIXED",
+ "count": 4
+ },
+ {
+ "val": "",
+ "count": 10
+ },
+ {
+ "val": "FALSE-POSITIVE",
+ "count": 0
+ }
+ ]
+ },
+ {
+ "property": "projectUuids",
+ "values": [
+ {
+ "val": "69e57151-be0d-4157-adff-c06741d88879",
+ "count": 10
+ }
+ ]
+ },
+ {
+ "property": "componentUuids",
+ "values": [
+ {
+ "val": "90dd5fda-5fce-4d76-bebf-132922abad95",
+ "count": 20
+ },
+ {
+ "val": "e2550527-3f86-4082-a9ae-e345f5a735aa",
+ "count": 10
+ },
+ {
+ "val": "97606f40-f3ef-4922-aa37-f67485917e67",
+ "count": 8
+ },
+ {
+ "val": "6c9c1986-59b3-4839-8dec-9499488f64d1",
+ "count": 7
+ },
+ {
+ "val": "e1b3c47e-e9a2-42ea-9cac-439ce2345d7e",
+ "count": 6
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "total": 4,
+ "p": 1,
+ "ps": 50,
+ "projects": [
+ {
+ "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
+ "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+ "id": 17637,
+ "qualifier": "TRK",
+ "name": "Sonar :: Issues Report :: Plugin",
+ "longName": "Sonar :: Issues Report :: Plugin"
+ },
+ {
+ "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+ "key": "org.codehaus.sonar:sonar",
+ "id": 2865,
+ "qualifier": "TRK",
+ "name": "SonarQube",
+ "longName": "SonarQube"
+ },
+ {
+ "uuid": "963cefe8-9128-475f-8d39-636685195e43",
+ "key": "com.sonarsource.rpg:rpg",
+ "id": 27165,
+ "qualifier": "TRK",
+ "name": "SonarSource :: RPG",
+ "longName": "SonarSource :: RPG"
+ }
+ ],
+ "components": [
+ {
+ "uuid": "f62c3080-6e75-4940-ae95-7dae743bcac3",
+ "key": "org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+ "id": 35659,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "ProxySearchScrollRequestBuilder.java",
+ "longName": "src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+ "path": "src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+ "projectId": 2865,
+ "subProjectId": 2872
+ },
+ {
+ "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+ "key": "org.codehaus.sonar:sonar",
+ "id": 2865,
+ "enabled": true,
+ "qualifier": "TRK",
+ "name": "SonarQube",
+ "longName": "SonarQube"
+ },
+ {
+ "uuid": "0160edec-b7ca-49a1-93ca-a6ea2c38ed21",
+ "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+ "id": 17639,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "IssuesReportPlugin.java",
+ "longName": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+ "path": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+ "projectId": 17637,
+ "subProjectId": 17637
+ },
+ {
+ "uuid": "6acccd14-18f8-436e-9a20-1d2d1f91295b",
+ "key": "com.sonarsource.rpg:rpg-analyzer:src/main/java/com/sonar/rpg/parser/Parser.java",
+ "id": 27173,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "Parser.java",
+ "longName": "src/main/java/com/sonar/rpg/parser/Parser.java",
+ "path": "src/main/java/com/sonar/rpg/parser/Parser.java",
+ "projectId": 27165,
+ "subProjectId": 27166
+ },
+ {
+ "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
+ "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+ "id": 17637,
+ "enabled": true,
+ "qualifier": "TRK",
+ "name": "Sonar :: Issues Report :: Plugin",
+ "longName": "Sonar :: Issues Report :: Plugin"
+ },
+ {
+ "uuid": "98662175-0f52-4f83-b0e9-1e9444320b5b",
+ "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
+ "id": 17640,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "ReportJob.java",
+ "longName": "src/main/java/org/sonar/issuesreport/ReportJob.java",
+ "path": "src/main/java/org/sonar/issuesreport/ReportJob.java",
+ "projectId": 17637,
+ "subProjectId": 17637
+ },
+ {
+ "uuid": "a6b74bc6-94b9-431f-b7fd-524553d42405",
+ "key": "com.sonarsource.rpg:rpg-analyzer",
+ "id": 27166,
+ "enabled": true,
+ "qualifier": "BRC",
+ "name": "SonarSource :: RPG :: Analyzer",
+ "longName": "SonarSource :: RPG :: Analyzer",
+ "path": "rpg-analyzer",
+ "projectId": 27165,
+ "subProjectId": 27165
+ },
+ {
+ "uuid": "e1f6f8bd-6b5f-4e2d-b936-4abffc9e4264",
+ "key": "org.codehaus.sonar:sonar-server",
+ "id": 2872,
+ "enabled": true,
+ "qualifier": "BRC",
+ "name": "SonarQube :: Server",
+ "longName": "SonarQube :: Server",
+ "path": "sonar-server",
+ "projectId": 2865,
+ "subProjectId": 2865
+ },
+ {
+ "uuid": "963cefe8-9128-475f-8d39-636685195e43",
+ "key": "com.sonarsource.rpg:rpg",
+ "id": 27165,
+ "enabled": true,
+ "qualifier": "TRK",
+ "name": "SonarSource :: RPG",
+ "longName": "SonarSource :: RPG"
+ }
+ ],
+ "issues": [
+ {
+ "key": "80f1562f-9f64-48a9-a6bb-1dcd2ebf444a",
+ "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+ "componentId": 17639,
+ "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+ "rule": "squid:S1161",
+ "status": "REOPENED",
+ "severity": "MINOR",
+ "message": "Add the \"@Override\" annotation above this method signature",
+ "line": 61,
+ "debt": "5min",
+ "assignee": "julien.henry",
+ "author": "julien.henry@sonarsource.com",
+ "creationDate": "2014-10-09T23:03:12+0200",
+ "updateDate": "2014-11-24T08:11:19+0100",
+ "fUpdateAge": "14 days",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ],
+ "assigneeName": "Julien Henry"
+ },
+ {
+ "key": "9eae5201-96c7-4e78-a407-8d58479c98a3",
+ "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
+ "componentId": 17640,
+ "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+ "rule": "squid:S1161",
+ "status": "REOPENED",
+ "severity": "MAJOR",
+ "message": "Add the \"@Override\" annotation above this method signature",
+ "line": 39,
+ "debt": "5min",
+ "assignee": "julien.henry",
+ "author": "julien.henry@sonarsource.com",
+ "creationDate": "2014-10-09T23:03:12+0200",
+ "updateDate": "2014-11-18T08:25:31+0100",
+ "fUpdateAge": "20 days",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ],
+ "assigneeName": "Julien Henry"
+ },
+ {
+ "key": "50bfc04f-6137-457a-a967-f6b1b7345365",
+ "component": "org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+ "componentId": 35659,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-server",
+ "rule": "common-java:InsufficientBranchCoverage",
+ "status": "REOPENED",
+ "severity": "MAJOR",
+ "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+ "debt": "10min",
+ "assignee": "julien.lancelot",
+ "creationDate": "2014-11-04T14:51:27+0100",
+ "updateDate": "2014-11-10T23:29:27+0100",
+ "fUpdateAge": "27 days",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ],
+ "assigneeName": "Julien Lancelot"
+ },
+ {
+ "key": "7012d6fc-e663-4032-aba6-70c4522453b4",
+ "component": "com.sonarsource.rpg:rpg-analyzer:src/main/java/com/sonar/rpg/parser/Parser.java",
+ "componentId": 27173,
+ "project": "com.sonarsource.rpg:rpg",
+ "subProject": "com.sonarsource.rpg:rpg-analyzer",
+ "rule": "squid:S1994",
+ "status": "REOPENED",
+ "severity": "MAJOR",
+ "message": "This loop's stop condition tests \"isEndOfFile()\" but the incrementer updates \"lineNumber\".",
+ "line": 69,
+ "debt": "20min",
+ "assignee": "pierre-yves.nicolas",
+ "author": "pierre-yves.nicolas@sonarsource.com",
+ "creationDate": "2014-10-09T23:05:10+0200",
+ "updateDate": "2014-10-31T10:33:08+0100",
+ "fUpdateAge": "about a month",
+ "comments": [
+ {
+ "key": "9d2b1d6e-9c9c-4ff2-bc55-af622922c4f0",
+ "login": "evgeny.mandrikov",
+ "userName": "Evgeny Mandrikov",
+ "htmlText": "Severity changed from "critical" to "major", because this is a new Java rule.<br/>Also message looks suspicious. Nico, could you please take a look?",
+ "markdown": "Severity changed from \"critical\" to \"major\", because this is a new Java rule.\nAlso message looks suspicious. Nico, could you please take a look?",
+ "updatable": false,
+ "createdAt": "2014-10-10T15:49:23+0200"
+ },
+ {
+ "key": "583033bd-c0be-4865-ba86-f1773c712bba",
+ "login": "nicolas.peru",
+ "userName": "Nicolas Peru",
+ "htmlText": "message has been improved in <a href=\"https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639\" target=\"_blank\">https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639</a>",
+ "markdown": "message has been improved in https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639",
+ "updatable": false,
+ "createdAt": "2014-10-13T17:38:52+0200"
+ }
+ ],
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ],
+ "assigneeName": "Pierre-Yves Nicolas"
+ }
+ ],
+ "rules": [
+ {
+ "key": "squid:S1994",
+ "name": "\"for\" loop incrementers should modify the variable being tested in the loop's stop condition",
+ "lang": "java",
+ "desc": "<p>It is almost always an error when a <code>for</code> loop's stop condition and incrementer don't act on the same variable. Even when it is not, it could confuse future maintainers of the code, and should be avoided.</p>\n\n<h2>Noncompliant Code Example</h2>\n<pre>\nfor (i = 0; i < 10; j++) { // Noncompliant\n // ...\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nfor (i = 0; i < 10; i++) {\n // ...\n}\n</pre>",
+ "status": "REMOVED",
+ "langName": "Java"
+ },
+ {
+ "key": "common-java:InsufficientBranchCoverage",
+ "name": "Insufficient branch coverage by unit tests",
+ "lang": "java",
+ "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S1161",
+ "name": "\"@Override\" annotation should be used on any method overriding (since Java 5) or implementing (since Java 6) another one",
+ "lang": "java",
+ "desc": "<p>Using the <code>@Override</code> annotation is useful for two reasons :</p>\n<ul>\n <li>It elicits a warning from the compiler if the annotated method doesn't actually override anything, as in the case of a misspelling.</li>\n <li>It improves the readability of the source code by making it obvious that methods are overridden.</li>\n</ul>\n<h2>Noncompliant Code Example</h2>\n<pre>\nclass ParentClass {\n public boolean doSomething(){...}\n}\nclass FirstChildClass extends ParentClass {\n public boolean doSomething(){...} //Non-Compliant\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nclass ParentClass {\n public boolean doSomething(){...}\n}\nclass FirstChildClass extends ParentClass {\n @Override\n public boolean doSomething(){...} //Compliant\n}\n</pre>",
+ "status": "REMOVED",
+ "langName": "Java"
+ }
+ ],
+ "users": [
+ {
+ "login": "julien.lancelot",
+ "name": "Julien Lancelot",
+ "active": true,
+ "email": "julien.lancelot@sonarsource.com"
+ },
+ {
+ "login": "pierre-yves.nicolas",
+ "name": "Pierre-Yves Nicolas",
+ "active": true,
+ "email": "pierre-yves.nicolas@sonarsource.com"
+ },
+ {
+ "login": "admin",
+ "name": "Admin Admin",
+ "active": true,
+ "email": "admin@sonarsource.com"
+ },
+ {
+ "login": "nicolas.peru",
+ "name": "Nicolas Peru",
+ "active": true,
+ "email": "nicolas.peru@sonarsource.com"
+ },
+ {
+ "login": "julien.henry",
+ "name": "Julien Henry",
+ "active": true,
+ "email": "julien.henry@sonarsource.com"
+ },
+ {
+ "login": "evgeny.mandrikov",
+ "name": "Evgeny Mandrikov",
+ "active": true,
+ "email": "evgeny.mandrikov@sonarsource.com"
+ }
+ ],
+ "actionPlans": [
+ {
+ "key": "1b9e7e52-ff58-40c1-80bf-f68429a3275e",
+ "name": "5.0",
+ "status": "OPEN",
+ "project": "org.codehaus.sonar:sonar",
+ "userLogin": "fabrice.bellingard",
+ "createdAt": "2014-09-01T17:14:55+0200",
+ "fCreatedAt": "Sep 1, 2014 5:14 PM",
+ "updatedAt": "2014-09-01T17:14:55+0200",
+ "fUpdatedAt": "Sep 1, 2014 5:14 PM"
+ },
+ {
+ "key": "151b796f-c5e1-40c9-89c0-ca391e8a31c0",
+ "name": "CPP 3.3",
+ "status": "OPEN",
+ "project": "com.sonarsource.cpp:cpp",
+ "userLogin": "eric.hartmann",
+ "createdAt": "2014-10-27T15:15:34+0100",
+ "fCreatedAt": "Oct 27, 2014 3:15 PM",
+ "updatedAt": "2014-10-27T15:15:34+0100",
+ "fUpdatedAt": "Oct 27, 2014 3:15 PM"
+ },
+ {
+ "key": "6f967cd5-687b-49ac-b4e3-b8d392374557",
+ "name": "4.5",
+ "status": "CLOSED",
+ "project": "org.codehaus.sonar:sonar",
+ "userLogin": "freddy.mallet",
+ "createdAt": "2014-07-01T21:22:52+0200",
+ "fCreatedAt": "Jul 1, 2014 9:22 PM",
+ "updatedAt": "2014-09-10T15:44:24+0200",
+ "fUpdatedAt": "Sep 10, 2014 3:44 PM"
+ }
+ ],
+ "languages": [
+ {
+ "key": "js",
+ "name": "JavaScript"
+ },
+ {
+ "key": "java",
+ "name": "Java"
+ }
+ ],
+ "maxResultsReached": false,
+ "paging": {
+ "pageIndex": 1,
+ "pageSize": 50,
+ "total": 4,
+ "fTotal": "4",
+ "pages": 1
+ },
+ "facets": [
+ {
+ "property": "severities",
+ "values": [
+ {
+ "val": "MAJOR",
+ "count": 3
+ },
+ {
+ "val": "MINOR",
+ "count": 1
+ },
+ {
+ "val": "INFO",
+ "count": 0
+ },
+ {
+ "val": "CRITICAL",
+ "count": 0
+ },
+ {
+ "val": "BLOCKER",
+ "count": 0
+ }
+ ]
+ },
+ {
+ "property": "statuses",
+ "values": [
+ {
+ "val": "CONFIRMED",
+ "count": 4583
+ },
+ {
+ "val": "OPEN",
+ "count": 324
+ },
+ {
+ "val": "REOPENED",
+ "count": 4
+ },
+ {
+ "val": "RESOLVED",
+ "count": 0
+ },
+ {
+ "val": "CLOSED",
+ "count": 0
+ }
+ ]
+ },
+ {
+ "property": "resolutions",
+ "values": [
+ {
+ "val": "",
+ "count": 4
+ },
+ {
+ "val": "FALSE-POSITIVE",
+ "count": 0
+ },
+ {
+ "val": "FIXED",
+ "count": 0
+ },
+ {
+ "val": "REMOVED",
+ "count": 0
+ }
+ ]
+ },
+ {
+ "property": "actionPlans",
+ "values": [
+ {
+ "val": "1b9e7e52-ff58-40c1-80bf-f68429a3275e",
+ "count": 4
+ },
+ {
+ "val": "151b796f-c5e1-40c9-89c0-ca391e8a31c0",
+ "count": 2
+ },
+ {
+ "val": "6f967cd5-687b-49ac-b4e3-b8d392374557",
+ "count": 1
+ },
+ {
+ "val": "",
+ "count": 4
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+/* global casper:false */
+
+var lib = require('../lib'),
+ testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-spec');
+
+
+casper.test.begin(testName('Mark as Favorite'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequest('/api/favourites', '{}', { type: 'POST' });
+ lib.mockRequest('/api/favourites/*', '{}', { type: 'DELETE' });
+ lib.mockRequestFromFile('/api/components/app', 'app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line');
+ })
+
+ .then(function () {
+ test.assertExists('.js-favorite');
+ test.assertExists('.icon-not-favorite');
+ casper.click('.js-favorite');
+ casper.waitForSelector('.icon-favorite', function () {
+ test.assertExists('.icon-favorite');
+ casper.click('.js-favorite');
+ casper.waitForSelector('.icon-not-favorite', function () {
+ test.assertExists('.icon-not-favorite');
+ });
+ });
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
+
+
+casper.test.begin(testName('Don\'t Show Favorite If Not Logged In'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'app-not-logged-in.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line');
+ })
+
+ .then(function () {
+ test.assertDoesntExist('.js-favorite');
+ test.assertDoesntExist('.icon-favorite');
+ test.assertDoesntExist('.icon-not-favorite');
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
--- /dev/null
+/* global casper:false */
+
+var lib = require('../lib'),
+ testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-spec');
+
+
+casper.test.begin(testName('Link to Raw'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line');
+ })
+
+ .then(function () {
+ casper.click('.js-actions');
+ casper.waitForSelector('.js-raw-source', function () {
+ casper.click('.js-raw-source');
+ });
+ })
+
+ .then(function () {
+ casper.withPopup(/Cache\.java/, function () {
+ this.test.assertUrlMatch('org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java');
+ });
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
--- /dev/null
+/* global casper:false */
+
+var lib = require('../lib'),
+ testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-should-show-measures-for-test-file');
+
+casper.test.begin(testName('Should Show Measures For Test File'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'api-sources-lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
+ lib.mockRequestFromFile('/api/resources', 'api-resources.json');
+ lib.mockRequestFromFile('/api/tests/show', 'api-tests-show.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line');
+ })
+
+ .then(function () {
+ casper.click('.js-actions');
+ casper.waitForSelector('.js-measures', function () {
+ casper.click('.js-measures');
+ casper.waitForSelector('.source-viewer-measures');
+ });
+ })
+
+ .then(function () {
+ // The test data is built the specific way when the formatted value
+ // of a measure is equal to the measure name.
+ var metrics = [
+ 'tests',
+ 'test_success_density',
+ 'test_failures',
+ 'test_errors',
+ 'skipped_tests',
+ 'test_execution_time'
+ ];
+ metrics.forEach(function (metric) {
+ test.assertSelectorContains('.measure[data-metric=' + metric + ']', metric);
+ });
+ })
+
+ .then(function () {
+ casper.click('.overlay-popup-close');
+ test.assertDoesntExist('.source-viewer-measures');
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
--- /dev/null
+{
+ "key": "test:fake-project-for-tests:src/test/java/foo/SimplestTest.java",
+ "path": "src/test/java/foo/SimplestTest.java",
+ "name": "SimplestTest.java",
+ "longName": "src/test/java/foo/SimplestTest.java",
+ "q": "UTS",
+ "project": "test:fake-project-for-tests",
+ "projectName": "Fake Project for Tests",
+ "fav": false,
+ "canMarkAsFavourite": true,
+ "canBulkChange": true,
+ "canCreateManualIssue": true,
+ "periods": [
+ [
+ 1,
+ "since previous analysis (2014 Dec 09)",
+ "2014-12-09T10:47:33+0100"
+ ],
+ [
+ 2,
+ "over 365 days (2014 Dec 09)",
+ "2014-12-09T10:47:33+0100"
+ ]
+ ],
+ "severities": [],
+ "rules": [],
+ "measures": {
+ "fTests": "3",
+ "fIssues": "0"
+ },
+ "tabs": [
+ "scm"
+ ],
+ "manual_rules": [
+ {
+ "key": "manual:api",
+ "name": "API"
+ },
+ {
+ "key": "manual:design",
+ "name": "Design"
+ },
+ {
+ "key": "manual:error_handling",
+ "name": "Error handling"
+ },
+ {
+ "key": "manual:performance",
+ "name": "Performance"
+ },
+ {
+ "key": "manual:sql_pitfalls",
+ "name": "SQL Pitfall"
+ }
+ ]
+}
--- /dev/null
+{
+ "total": 0,
+ "p": 1,
+ "ps": 100,
+ "projects": [
+ {
+ "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+ "key": "test:fake-project-for-tests",
+ "id": 36125,
+ "qualifier": "TRK",
+ "name": "Fake Project for Tests",
+ "longName": "Fake Project for Tests"
+ }
+ ],
+ "components": [
+ {
+ "uuid": "58f53b48-f375-4e3d-9b84-1c0e5a373f62",
+ "key": "test:fake-project-for-tests:src/test/java/foo/SimplestTest.java",
+ "id": 36134,
+ "enabled": true,
+ "qualifier": "UTS",
+ "name": "SimplestTest.java",
+ "longName": "src/test/java/foo/SimplestTest.java",
+ "path": "src/test/java/foo/SimplestTest.java",
+ "projectId": 36125,
+ "subProjectId": 36125
+ },
+ {
+ "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+ "key": "test:fake-project-for-tests",
+ "id": 36125,
+ "enabled": true,
+ "qualifier": "TRK",
+ "name": "Fake Project for Tests",
+ "longName": "Fake Project for Tests"
+ }
+ ],
+ "issues": [],
+ "rules": [],
+ "users": [
+ {
+ "login": "admin",
+ "name": "Admin Admin",
+ "active": true,
+ "email": "admin@sonarsource.com"
+ }
+ ],
+ "languages": [
+ {
+ "key": "js",
+ "name": "JavaScript"
+ },
+ {
+ "key": "java",
+ "name": "Java"
+ }
+ ],
+ "maxResultsReached": false,
+ "paging": {
+ "pageIndex": 1,
+ "pageSize": 100,
+ "total": 0,
+ "fTotal": "0",
+ "pages": 0
+ }
+}
--- /dev/null
+[
+ {
+ "id": 36129,
+ "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "name": "Simplest.java",
+ "scope": "FIL",
+ "qualifier": "FIL",
+ "date": "2014-12-09T10:58:44+0100",
+ "creationDate": "2014-12-09T10:47:35+0100",
+ "lname": "src/main/java/foo/Simplest.java",
+ "lang": "java",
+ "msr": [
+ {
+ "key": "tests",
+ "val": 1,
+ "frmt_val": "tests"
+ },
+ {
+ "key": "test_success_density",
+ "val": 1,
+ "frmt_val": "test_success_density"
+ },
+ {
+ "key": "test_failures",
+ "val": 1,
+ "frmt_val": "test_failures"
+ },
+ {
+ "key": "test_errors",
+ "val": 1,
+ "frmt_val": "test_errors"
+ },
+ {
+ "key": "skipped_tests",
+ "val": 1,
+ "frmt_val": "skipped_tests"
+ },
+ {
+ "key": "test_execution_time",
+ "val": 1,
+ "frmt_val": "test_execution_time"
+ }
+ ]
+ }
+]
--- /dev/null
+{
+ "sources": [
+ {
+ "line": 1,
+ "code": "<span class=\"k\">package </span>foo;",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 2,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 3,
+ "code": "<span class=\"cppd\">/**</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+ "scmDate": "2013-09-19T15:37:05+0200"
+ },
+ {
+ "line": 4,
+ "code": "<span class=\"cppd\"> * Simple class</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+ "scmDate": "2013-09-19T15:37:05+0200"
+ },
+ {
+ "line": 5,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+ "scmDate": "2013-09-19T15:37:05+0200"
+ },
+ {
+ "line": 6,
+ "code": "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1 sym\">Simplest</span> {",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 7,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 8,
+ "code": " <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">int </span><span class=\"sym-2 sym\">add</span>(<span class=\"k\">int </span><span class=\"sym-3 sym\">a</span>, <span class=\"k\">int </span><span class=\"sym-4 sym\">b</span>) {",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 9,
+ "code": " \t<span class=\"cppd\">// introduce a variable that is not needed - just to get a violation</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+ "scmDate": "2013-10-15T16:14:22+0200"
+ },
+ {
+ "line": 10,
+ "code": " \t<span class=\"k\">int </span><span class=\"sym-5 sym\">result</span> = <span class=\"sym-3 sym\">a</span> + <span class=\"sym-4 sym\">b</span>;",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+ "scmDate": "2013-10-15T16:14:22+0200"
+ },
+ {
+ "line": 11,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+ "scmDate": "2014-01-09T16:48:59+0100"
+ },
+ {
+ "line": 12,
+ "code": " \tSystem.out.println(<span class=\"s\">\"\"</span>);",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+ "scmDate": "2014-01-09T16:48:59+0100"
+ },
+ {
+ "line": 13,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+ "scmDate": "2014-01-09T16:48:59+0100"
+ },
+ {
+ "line": 14,
+ "code": " <span class=\"k\">return </span><span class=\"sym-5 sym\">result</span>;",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+ "scmDate": "2013-10-15T16:14:22+0200"
+ },
+ {
+ "line": 15,
+ "code": " }",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 16,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 17,
+ "code": "}",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 18,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ }
+ ]
+}
--- /dev/null
+{"tests": [
+ {
+ "name": "testOK",
+ "status": "OK",
+ "durationInMs": 9,
+ "coveredLines": 3
+ },
+ {
+ "name": "testERROR",
+ "status": "ERROR",
+ "durationInMs": 8,
+ "coveredLines": 4,
+ "stackTrace": "stacktrace error"
+ },
+ {
+ "name": "testFAILURE",
+ "status": "FAILURE",
+ "durationInMs": 7,
+ "coveredLines": 5,
+ "message": "message failure",
+ "stackTrace": "stacktrace failure"
+ },
+ {
+ "name": "testSKIPPED",
+ "status": "SKIPPED"
+ }
+]}
--- /dev/null
+/* global casper:false */
+
+var lib = require('../lib'),
+ testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-should-show-measures');
+
+
+casper.test.begin(testName('Should Show Measures'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'api-sources-lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
+ lib.mockRequestFromFile('/api/resources', 'api-resources.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line');
+ })
+
+ .then(function () {
+ casper.click('.js-actions');
+ casper.waitForSelector('.js-measures', function () {
+ casper.click('.js-measures');
+ casper.waitForSelector('.source-viewer-measures');
+ });
+ })
+
+ .then(function () {
+ // The test data is built the specific way when the formatted value
+ // of a measure is equal to the measure name.
+ var metrics = [
+ 'accessors',
+ 'classes',
+ 'functions',
+ 'statements',
+ 'ncloc',
+ 'lines',
+ 'generated_ncloc',
+ 'generated_lines',
+ 'complexity',
+ 'function_complexity',
+ 'comment_lines',
+ 'comment_lines_density',
+ 'public_api',
+ 'public_undocumented_api',
+ 'public_documented_api_density',
+
+ 'coverage',
+ 'line_coverage',
+ 'lines_to_cover',
+ 'uncovered_lines',
+ 'branch_coverage',
+ 'conditions_to_cover',
+ 'uncovered_conditions',
+ 'it_coverage',
+ 'it_line_coverage',
+ 'it_lines_to_cover',
+ 'it_uncovered_lines',
+ 'it_branch_coverage',
+ 'it_conditions_to_cover',
+ 'it_uncovered_conditions',
+ 'overall_coverage',
+ 'overall_line_coverage',
+ 'overall_lines_to_cover',
+ 'overall_uncovered_lines',
+ 'overall_branch_coverage',
+ 'overall_conditions_to_cover',
+ 'overall_uncovered_conditions',
+
+ 'violations',
+ 'sqale_index',
+ 'sqale_debt_ratio',
+ 'blocker_violations',
+ 'critical_violations',
+ 'major_violations',
+ 'minor_violations',
+ 'info_violations',
+
+ 'duplicated_lines_density',
+ 'duplicated_blocks',
+ 'duplicated_lines'
+ ];
+ metrics.forEach(function (metric) {
+ test.assertSelectorContains('.measure[data-metric=' + metric + ']', metric);
+ });
+ })
+
+ .then(function () {
+ casper.click('.overlay-popup-close');
+ test.assertDoesntExist('.source-viewer-measures');
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
--- /dev/null
+{
+ "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "path": "src/main/java/foo/Simplest.java",
+ "name": "Simplest.java",
+ "longName": "src/main/java/foo/Simplest.java",
+ "q": "FIL",
+ "project": "test:fake-project-for-tests",
+ "projectName": "Fake Project for Tests",
+ "fav": false,
+ "canMarkAsFavourite": true,
+ "canBulkChange": true,
+ "canCreateManualIssue": true,
+ "periods": [
+ [
+ 1,
+ "since previous analysis (2014 Dec 09)",
+ "2014-12-09T10:47:33+0100"
+ ],
+ [
+ 2,
+ "over 365 days (2014 Dec 09)",
+ "2014-12-09T10:47:33+0100"
+ ]
+ ],
+ "severities": [
+ [
+ "MINOR",
+ "Minor",
+ 1
+ ],
+ [
+ "MAJOR",
+ "Major",
+ 4
+ ]
+ ],
+ "rules": [
+ [
+ "squid:IndentationCheck",
+ "Source code should be correctly indented",
+ 2
+ ],
+ [
+ "squid:S1118",
+ "Utility classes should not have a public constructor",
+ 1
+ ],
+ [
+ "squid:S00105",
+ "Tabulation characters should not be used",
+ 1
+ ],
+ [
+ "squid:S106",
+ "System.out and System.err should not be used as loggers",
+ 1
+ ]
+ ],
+ "measures": {
+ "fNcloc": "8",
+ "fCoverage": "75.0%",
+ "fDebt": "44min",
+ "fSqaleRating": "C",
+ "fSqaleDebtRatio": "18.3%",
+ "fIssues": "5",
+ "fMinorIssues": "1",
+ "fMajorIssues": "4"
+ },
+ "tabs": [
+ "scm",
+ "coverage"
+ ],
+ "manual_rules": [
+ {
+ "key": "manual:api",
+ "name": "API"
+ },
+ {
+ "key": "manual:design",
+ "name": "Design"
+ },
+ {
+ "key": "manual:error_handling",
+ "name": "Error handling"
+ },
+ {
+ "key": "manual:performance",
+ "name": "Performance"
+ },
+ {
+ "key": "manual:sql_pitfalls",
+ "name": "SQL Pitfall"
+ }
+ ]
+}
--- /dev/null
+{
+ "total": 5,
+ "p": 1,
+ "ps": 100,
+ "projects": [
+ {
+ "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+ "key": "test:fake-project-for-tests",
+ "id": 36125,
+ "qualifier": "TRK",
+ "name": "Fake Project for Tests",
+ "longName": "Fake Project for Tests"
+ }
+ ],
+ "components": [
+ {
+ "uuid": "b4248001-df0c-436a-8acd-a152809b8a23",
+ "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "id": 36129,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "Simplest.java",
+ "longName": "src/main/java/foo/Simplest.java",
+ "path": "src/main/java/foo/Simplest.java",
+ "projectId": 36125,
+ "subProjectId": 36125
+ },
+ {
+ "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+ "key": "test:fake-project-for-tests",
+ "id": 36125,
+ "enabled": true,
+ "qualifier": "TRK",
+ "name": "Fake Project for Tests",
+ "longName": "Fake Project for Tests"
+ }
+ ],
+ "issues": [
+ {
+ "key": "91b13078-6f69-4b51-ab0f-8fd0bc391532",
+ "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "componentId": 36129,
+ "project": "test:fake-project-for-tests",
+ "rule": "squid:S00105",
+ "status": "OPEN",
+ "severity": "MINOR",
+ "message": "Replace all tab characters in this file by sequences of white-spaces.",
+ "debt": "2min",
+ "creationDate": "2014-12-09T10:47:33+0100",
+ "updateDate": "2014-12-09T10:47:33+0100",
+ "fUpdateAge": "3 hours",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ]
+ },
+ {
+ "key": "c18ae6fa-fac7-46b5-bd71-feef7906b05a",
+ "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "componentId": 36129,
+ "project": "test:fake-project-for-tests",
+ "rule": "squid:S1118",
+ "status": "OPEN",
+ "severity": "MAJOR",
+ "message": "Add a private constructor to hide the implicit public one.",
+ "line": 6,
+ "debt": "30min",
+ "creationDate": "2014-12-09T10:47:33+0100",
+ "updateDate": "2014-12-09T10:47:33+0100",
+ "fUpdateAge": "3 hours",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ]
+ },
+ {
+ "key": "816282ec-0ca9-4d03-b8bc-22b515496fe4",
+ "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "componentId": 36129,
+ "project": "test:fake-project-for-tests",
+ "rule": "squid:IndentationCheck",
+ "status": "OPEN",
+ "severity": "MAJOR",
+ "message": "Make this line start at column 3.",
+ "line": 8,
+ "debt": "1min",
+ "creationDate": "2014-12-09T10:47:33+0100",
+ "updateDate": "2014-12-09T10:47:33+0100",
+ "fUpdateAge": "3 hours",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ]
+ },
+ {
+ "key": "0229497b-a613-48f3-83ed-2b98983e5e60",
+ "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "componentId": 36129,
+ "project": "test:fake-project-for-tests",
+ "rule": "squid:IndentationCheck",
+ "status": "OPEN",
+ "severity": "MAJOR",
+ "message": "Make this line start at column 5.",
+ "line": 10,
+ "debt": "1min",
+ "creationDate": "2014-12-09T10:47:33+0100",
+ "updateDate": "2014-12-09T10:47:33+0100",
+ "fUpdateAge": "3 hours",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ]
+ },
+ {
+ "key": "896ccfe0-bb85-4155-be1f-1aaece716539",
+ "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "componentId": 36129,
+ "project": "test:fake-project-for-tests",
+ "rule": "squid:S106",
+ "status": "OPEN",
+ "severity": "MAJOR",
+ "message": "Replace this usage of System.out or System.err by a logger.",
+ "line": 12,
+ "debt": "10min",
+ "creationDate": "2014-12-09T10:47:33+0100",
+ "updateDate": "2014-12-09T10:47:33+0100",
+ "fUpdateAge": "3 hours",
+ "actions": [
+ "comment",
+ "assign",
+ "assign_to_me",
+ "plan",
+ "set_severity"
+ ],
+ "transitions": [
+ "confirm",
+ "resolve",
+ "falsepositive"
+ ]
+ }
+ ],
+ "rules": [
+ {
+ "key": "squid:IndentationCheck",
+ "name": "Source code should be correctly indented",
+ "lang": "java",
+ "desc": "<p>\nProper indentation is a simple and effective way to improve the code's readability.\nConsistent indentation among developers also reduces the differences that are committed to source control systems, making code reviews easier.\n</p>\n\n<p>The following code illustrates this rule with an indentation level of 2:</p>\n\n<pre>\nclass Foo {\n public int a; // Compliant\npublic int b; // Non-Compliant\n}\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S1118",
+ "name": "Utility classes should not have a public constructor",
+ "lang": "java",
+ "desc": "<p>\nUtility classes, which are a collection of static members, are not meant to be instantiated.\nThey should therefore not have public constructors.\n</p>\n\n<p>\nJava adds an implicit public constructor to every class which does not define at least one explicitly.\nHence, at least one non-public constructor should be defined.\n</p>\n\n<p>The following code:</p>\n\n<pre>\nclass StringUtils { // Non-Compliant\n\n public static String concatenate(String s1, String s2) {\n return s1 + s2;\n }\n\n}\n</pre>\n\n<p>should be refactored into:</p>\n\n<pre>\nclass StringUtils { // Compliant\n\n private StringUtils() {\n }\n\n public static String concatenate(String s1, String s2) {\n return s1 + s2;\n }\n\n}\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S00105",
+ "name": "Tabulation characters should not be used",
+ "lang": "java",
+ "desc": "<p>\nDevelopers should not need to configure the tab width of their text editors in order to be able to read source code.\nSo the use of tabulation character must be banned.\n</p>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S106",
+ "name": "System.out and System.err should not be used as loggers",
+ "lang": "java",
+ "desc": "<p>Two important requirements must be fulfilled when logging messages:</p>\n\n<ul>\n <li>The user must be able to easily retrieve the logs.</li>\n <li>The format of all messages must be uniform to enable users to easily browse them.</li>\n</ul>\n\n<p>\nIf a program directly writes to the standard output, there is absolutely no way to comply with these requirements.\nThat's why defining and using a dedicated logger is highly recommended.\n</p>\n\n<p>\nThe following code snippet illustrates this rule:\n</p>\n\n<pre>\nSystem.out.println(\"My Message\"); // Non-Compliant\n\nlogger.log(\"My Message\"); // Compliant\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ }
+ ],
+ "users": [
+ {
+ "login": "admin",
+ "name": "Admin Admin",
+ "active": true,
+ "email": "admin@sonarsource.com"
+ }
+ ],
+ "languages": [
+ {
+ "key": "js",
+ "name": "JavaScript"
+ },
+ {
+ "key": "java",
+ "name": "Java"
+ }
+ ],
+ "maxResultsReached": false,
+ "paging": {
+ "pageIndex": 1,
+ "pageSize": 100,
+ "total": 5,
+ "fTotal": "5",
+ "pages": 1
+ }
+}
--- /dev/null
+[
+ {
+ "id": 36129,
+ "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+ "name": "Simplest.java",
+ "scope": "FIL",
+ "qualifier": "FIL",
+ "date": "2014-12-09T10:58:44+0100",
+ "creationDate": "2014-12-09T10:47:35+0100",
+ "lname": "src/main/java/foo/Simplest.java",
+ "lang": "java",
+ "msr": [
+ {
+ "key": "accessors",
+ "val": 1,
+ "frmt_val": "accessors"
+ },
+ {
+ "key": "classes",
+ "val": 1,
+ "frmt_val": "classes"
+ },
+ {
+ "key": "functions",
+ "val": 1,
+ "frmt_val": "functions"
+ },
+ {
+ "key": "statements",
+ "val": 1,
+ "frmt_val": "statements"
+ },
+ {
+ "key": "ncloc",
+ "val": 1,
+ "frmt_val": "ncloc"
+ },
+ {
+ "key": "lines",
+ "val": 1,
+ "frmt_val": "lines"
+ },
+ {
+ "key": "generated_ncloc",
+ "val": 1,
+ "frmt_val": "generated_ncloc"
+ },
+ {
+ "key": "generated_lines",
+ "val": 1,
+ "frmt_val": "generated_lines"
+ },
+ {
+ "key": "complexity",
+ "val": 1,
+ "frmt_val": "complexity"
+ },
+ {
+ "key": "function_complexity",
+ "val": 1,
+ "frmt_val": "function_complexity"
+ },
+ {
+ "key": "comment_lines",
+ "val": 1,
+ "frmt_val": "comment_lines"
+ },
+ {
+ "key": "comment_lines_density",
+ "val": 1,
+ "frmt_val": "comment_lines_density"
+ },
+ {
+ "key": "public_api",
+ "val": 1,
+ "frmt_val": "public_api"
+ },
+ {
+ "key": "public_undocumented_api",
+ "val": 1,
+ "frmt_val": "public_undocumented_api"
+ },
+ {
+ "key": "public_documented_api_density",
+ "val": 1,
+ "frmt_val": "public_documented_api_density"
+ },
+ {
+ "key": "coverage",
+ "val": 1,
+ "frmt_val": "coverage"
+ },
+ {
+ "key": "line_coverage",
+ "val": 1,
+ "frmt_val": "line_coverage"
+ },
+ {
+ "key": "lines_to_cover",
+ "val": 1,
+ "frmt_val": "lines_to_cover"
+ },
+ {
+ "key": "uncovered_lines",
+ "val": 1,
+ "frmt_val": "uncovered_lines"
+ },
+ {
+ "key": "branch_coverage",
+ "val": 1,
+ "frmt_val": "branch_coverage"
+ },
+ {
+ "key": "conditions_to_cover",
+ "val": 1,
+ "frmt_val": "conditions_to_cover"
+ },
+ {
+ "key": "uncovered_conditions",
+ "val": 1,
+ "frmt_val": "uncovered_conditions"
+ },
+ {
+ "key": "it_coverage",
+ "val": 1,
+ "frmt_val": "it_coverage"
+ },
+ {
+ "key": "it_line_coverage",
+ "val": 1,
+ "frmt_val": "it_line_coverage"
+ },
+ {
+ "key": "it_lines_to_cover",
+ "val": 1,
+ "frmt_val": "it_lines_to_cover"
+ },
+ {
+ "key": "it_uncovered_lines",
+ "val": 1,
+ "frmt_val": "it_uncovered_lines"
+ },
+ {
+ "key": "it_branch_coverage",
+ "val": 1,
+ "frmt_val": "it_branch_coverage"
+ },
+ {
+ "key": "it_conditions_to_cover",
+ "val": 1,
+ "frmt_val": "it_conditions_to_cover"
+ },
+ {
+ "key": "it_uncovered_conditions",
+ "val": 1,
+ "frmt_val": "it_uncovered_conditions"
+ },
+ {
+ "key": "overall_coverage",
+ "val": 1,
+ "frmt_val": "overall_coverage"
+ },
+ {
+ "key": "overall_line_coverage",
+ "val": 1,
+ "frmt_val": "overall_line_coverage"
+ },
+ {
+ "key": "overall_lines_to_cover",
+ "val": 1,
+ "frmt_val": "overall_lines_to_cover"
+ },
+ {
+ "key": "overall_uncovered_lines",
+ "val": 1,
+ "frmt_val": "overall_uncovered_lines"
+ },
+ {
+ "key": "overall_branch_coverage",
+ "val": 1,
+ "frmt_val": "overall_branch_coverage"
+ },
+ {
+ "key": "overall_conditions_to_cover",
+ "val": 1,
+ "frmt_val": "overall_conditions_to_cover"
+ },
+ {
+ "key": "overall_uncovered_conditions",
+ "val": 1,
+ "frmt_val": "overall_uncovered_conditions"
+ },
+ {
+ "key": "violations",
+ "val": 1,
+ "frmt_val": "violations"
+ },
+ {
+ "key": "sqale_index",
+ "val": 1,
+ "frmt_val": "sqale_index"
+ },
+ {
+ "key": "sqale_rating",
+ "val": 1,
+ "frmt_val": "sqale_rating"
+ },
+ {
+ "key": "sqale_debt_ratio",
+ "val": 1,
+ "frmt_val": "sqale_debt_ratio"
+ },
+ {
+ "key": "blocker_violations",
+ "val": 1,
+ "frmt_val": "blocker_violations"
+ },
+ {
+ "key": "critical_violations",
+ "val": 1,
+ "frmt_val": "critical_violations"
+ },
+ {
+ "key": "major_violations",
+ "val": 1,
+ "frmt_val": "major_violations"
+ },
+ {
+ "key": "minor_violations",
+ "val": 1,
+ "frmt_val": "minor_violations"
+ },
+ {
+ "key": "info_violations",
+ "val": 1,
+ "frmt_val": "info_violations"
+ },
+ {
+ "key": "duplicated_lines_density",
+ "val": 1,
+ "frmt_val": "duplicated_lines_density"
+ },
+ {
+ "key": "duplicated_blocks",
+ "val": 1,
+ "frmt_val": "duplicated_blocks"
+ },
+ {
+ "key": "duplicated_lines",
+ "val": 1,
+ "frmt_val": "duplicated_lines"
+ }
+
+ ]
+ }
+]
--- /dev/null
+{
+ "sources": [
+ {
+ "line": 1,
+ "code": "<span class=\"k\">package </span>foo;",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 2,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 3,
+ "code": "<span class=\"cppd\">/**</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+ "scmDate": "2013-09-19T15:37:05+0200"
+ },
+ {
+ "line": 4,
+ "code": "<span class=\"cppd\"> * Simple class</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+ "scmDate": "2013-09-19T15:37:05+0200"
+ },
+ {
+ "line": 5,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+ "scmDate": "2013-09-19T15:37:05+0200"
+ },
+ {
+ "line": 6,
+ "code": "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1 sym\">Simplest</span> {",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 7,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 8,
+ "code": " <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">int </span><span class=\"sym-2 sym\">add</span>(<span class=\"k\">int </span><span class=\"sym-3 sym\">a</span>, <span class=\"k\">int </span><span class=\"sym-4 sym\">b</span>) {",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 9,
+ "code": " \t<span class=\"cppd\">// introduce a variable that is not needed - just to get a violation</span>",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+ "scmDate": "2013-10-15T16:14:22+0200"
+ },
+ {
+ "line": 10,
+ "code": " \t<span class=\"k\">int </span><span class=\"sym-5 sym\">result</span> = <span class=\"sym-3 sym\">a</span> + <span class=\"sym-4 sym\">b</span>;",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+ "scmDate": "2013-10-15T16:14:22+0200"
+ },
+ {
+ "line": 11,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+ "scmDate": "2014-01-09T16:48:59+0100"
+ },
+ {
+ "line": 12,
+ "code": " \tSystem.out.println(<span class=\"s\">\"\"</span>);",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+ "scmDate": "2014-01-09T16:48:59+0100"
+ },
+ {
+ "line": 13,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+ "scmDate": "2014-01-09T16:48:59+0100"
+ },
+ {
+ "line": 14,
+ "code": " <span class=\"k\">return </span><span class=\"sym-5 sym\">result</span>;",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+ "scmDate": "2013-10-15T16:14:22+0200"
+ },
+ {
+ "line": 15,
+ "code": " }",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 16,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 17,
+ "code": "}",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ },
+ {
+ "line": 18,
+ "code": "",
+ "scmAuthor": "fabrice.bellingard@sonarsource.com",
+ "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+ "scmDate": "2013-09-16T15:31:49+0200"
+ }
+ ]
+}
--- /dev/null
+/* global casper:false */
+
+var lib = require('../lib'),
+ testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-spec');
+
+
+casper.test.begin(testName('Base'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line', function () {
+ // Check header elements
+ test.assertExists('.source-viewer-header');
+ test.assertSelectorContains('.source-viewer-header-component-project', 'SonarQube');
+ test.assertSelectorContains('.source-viewer-header-component-project', 'SonarQube :: Batch');
+ test.assertSelectorContains('.source-viewer-header-component-name',
+ 'src/main/java/org/sonar/batch/index/Cache.java');
+ test.assertExists('.source-viewer-header-favorite');
+ test.assertExists('.source-viewer-header-actions');
+
+ // Check main measures
+ // FIXME enable lines check
+ //test.assertSelectorContains('.source-viewer-header-measure', '379');
+ test.assertSelectorContains('.source-viewer-header-measure', 'A');
+ test.assertSelectorContains('.source-viewer-header-measure', '2h 10min');
+ test.assertSelectorContains('.source-viewer-header-measure', '6');
+ test.assertSelectorContains('.source-viewer-header-measure', '74.3%');
+ test.assertSelectorContains('.source-viewer-header-measure', '5.8%');
+
+ // Check source
+ // FIXME enable source lines count check
+ //test.assertElementCount('.source-line', 518);
+ test.assertSelectorContains('.source-viewer', 'public class Cache');
+ });
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
+
+
+casper.test.begin(testName('Decoration'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line');
+ })
+
+ .then(function () {
+ // Check issues decoration
+ test.assertElementCount('.has-issues', 6);
+ })
+
+ .then(function () {
+ // Check coverage decoration
+ test.assertElementCount('.source-line-covered', 142);
+ test.assertElementCount('.source-line-uncovered', 50);
+ test.assertElementCount('.source-line-partially-covered', 2);
+ })
+
+ .then(function () {
+ // Check duplications decoration
+ test.assertElementCount('.source-line-duplicated', 30);
+ })
+
+ .then(function () {
+ // Check scm decoration
+ test.assertElementCount('.source-line-scm-inner', 186);
+ test.assertExists('.source-line-scm-inner[data-author="simon.brandhof@gmail.com"]');
+ test.assertExists('.source-line-scm-inner[data-author="julien.henry@sonarsource.com"]');
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
+
+
+casper.test.begin(testName('Test File'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'tests/app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'tests/lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line');
+ })
+
+ .then(function () {
+ test.assertSelectorContains('.source-viewer-header-measure', '6');
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
+
+
+// FIXME enable test
+//casper.test.begin(testName('Go From Coverage to Test File'), function (test) {
+// casper
+// .start(lib.buildUrl('source-viewer'), function () {
+// lib.setDefaultViewport();
+// lib.mockRequest('/api/l10n/index', '{}');
+// lib.mockRequestFromFile('/api/components/app', 'app.json');
+// lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+// lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+// lib.mockRequestFromFile('/api/tests/test_cases', 'test-cases.json');
+// })
+//
+// .then(function () {
+// casper.waitForSelector('.component-viewer-source .source-line');
+// })
+//
+// .then(function () {
+// casper.click('.js-toggle-coverage');
+// casper.waitForSelector('.source-line-covered', function () {
+// casper.click('.source-line-covered');
+// casper.waitForSelector('.bubble-popup', function () {
+// test.assertSelectorContains('.bubble-popup', 'src/test/java/org/sonar/batch/issue/IssueCacheTest.java');
+// test.assertSelectorContains('.bubble-popup', 'should_update_existing_issue');
+// test.assertSelectorContains('.bubble-popup li[title="should_update_existing_issue"]', '293');
+//
+// lib.clearRequestMocks();
+// lib.mockRequestFromFile('/api/components/app', 'tests/app.json');
+// lib.mockRequestFromFile('/api/sources/show', 'tests/source.json');
+// lib.mockRequestFromFile('/api/resources', 'tests/resources.json');
+// lib.mockRequest('/api/coverage/show', '{}');
+// lib.mockRequestFromFile('/api/tests/show', 'tests/tests.json');
+// casper.click('.component-viewer-popup-test-file[data-key]');
+//
+// casper.waitForSelector('.js-unit-test', function () {
+// test.assertElementCount('.js-unit-test', 2);
+// });
+// });
+// });
+// })
+//
+// .run(function () {
+// test.done();
+// });
+//});
+
+
+casper.test.begin(testName('Create Manual Issue'), function (test) {
+ casper
+ .start(lib.buildUrl('source-viewer'), function () {
+ lib.setDefaultViewport();
+
+ lib.mockRequest('/api/l10n/index', '{}');
+ lib.mockRequestFromFile('/api/components/app', 'app.json');
+ lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+ lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+ lib.mockRequestFromFile('/api/issues/create', 'create-issue.json');
+ lib.mockRequestFromFile('/api/issues/show', 'create-issue.json');
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line-number[data-line-number="3"]');
+ })
+
+ .then(function () {
+ casper.click('.source-line-number[data-line-number="3"]');
+ casper.waitForSelector('.js-add-manual-issue');
+ })
+
+ .then(function () {
+ casper.click('.js-add-manual-issue');
+ casper.waitForSelector('.js-manual-issue-form');
+ })
+
+ .then(function () {
+ casper.fill('.js-manual-issue-form', {
+ rule: 'manual:api',
+ message: 'An issue message'
+ }, true);
+ })
+
+ .then(function () {
+ casper.waitForSelector('.source-line-code.has-issues[data-line-number="3"]', function () {
+ test.assertExists('.source-line-code.has-issues[data-line-number="3"]');
+ });
+ })
+
+ .run(function () {
+ test.done();
+ });
+});
--- /dev/null
+{"key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "path": "src/main/java/org/sonar/batch/index/Cache.java",
+ "name": "Cache.java",
+ "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+ "q": "FIL", "subProject": "org.codehaus.sonar:sonar-batch",
+ "subProjectName": "SonarQube :: Batch",
+ "project": "org.codehaus.sonar:sonar",
+ "projectName": "SonarQube",
+ "fav": false,
+ "canMarkAsFavourite": false,
+ "canBulkChange": false,
+ "canCreateManualIssue": false,
+ "periods": [
+ [1, "since previous analysis (2014 Dec 01)", "2014-12-01T18:51:13+0100"],
+ [2, "over 365 days (2013 Dec 01)", "2013-12-01T00:40:31+0100"],
+ [3, "since previous version (4.5 - 2014 Sep 03)", "2014-09-03T23:16:52+0200"]
+ ],
+ "severities": [
+ ["MINOR", "Minor", 1],
+ ["MAJOR", "Major", 1],
+ ["INFO", "Info", 4]
+ ],
+ "rules": [
+ ["common-java:DuplicatedBlocks", "Duplicated blocks", 1],
+ ["squid:S1192", "String literals should not be duplicated", 1],
+ ["squid:S1135", "TODO tags should be handled", 4]
+ ],
+ "measures": {
+ "fNcloc": "378",
+ "fCoverage": "74.3%",
+ "fDuplicationDensity": "5.8%",
+ "fDebt": "2h 10min",
+ "fSqaleRating": "A",
+ "fSqaleDebtRatio": "1.1%",
+ "fIssues": "6",
+ "fMinorIssues": "1",
+ "fMajorIssues": "1",
+ "fInfoIssues": "4"
+ },
+ "tabs": ["scm", "coverage", "duplications"],
+ "manual_rules": [
+ {
+ "key": "manual:api",
+ "name": "API"
+ },
+ {
+ "key": "manual:design",
+ "name": "Design"
+ },
+ {
+ "key": "manual:error_handling",
+ "name": "Error handling"
+ },
+ {
+ "key": "manual:performance",
+ "name": "Performance"
+ },
+ {
+ "key": "manual:sql_pitfalls",
+ "name": "SQL Pitfall"
+ }
+ ]}
--- /dev/null
+{"key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "path": "src/main/java/org/sonar/batch/index/Cache.java",
+ "name": "Cache.java",
+ "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+ "q": "FIL", "subProject": "org.codehaus.sonar:sonar-batch",
+ "subProjectName": "SonarQube :: Batch",
+ "project": "org.codehaus.sonar:sonar",
+ "projectName": "SonarQube",
+ "fav": false,
+ "canMarkAsFavourite": true,
+ "canBulkChange": true,
+ "canCreateManualIssue": true,
+ "periods": [
+ [1, "since previous analysis (2014 Dec 01)", "2014-12-01T18:51:13+0100"],
+ [2, "over 365 days (2013 Dec 01)", "2013-12-01T00:40:31+0100"],
+ [3, "since previous version (4.5 - 2014 Sep 03)", "2014-09-03T23:16:52+0200"]
+ ],
+ "severities": [
+ ["MINOR", "Minor", 1],
+ ["MAJOR", "Major", 1],
+ ["INFO", "Info", 4]
+ ],
+ "rules": [
+ ["common-java:DuplicatedBlocks", "Duplicated blocks", 1],
+ ["squid:S1192", "String literals should not be duplicated", 1],
+ ["squid:S1135", "TODO tags should be handled", 4]
+ ],
+ "measures": {
+ "fNcloc": "378",
+ "fCoverage": "74.3%",
+ "fDuplicationDensity": "5.8%",
+ "fDebt": "2h 10min",
+ "fSqaleRating": "A",
+ "fSqaleDebtRatio": "1.1%",
+ "fIssues": "6",
+ "fMinorIssues": "1",
+ "fMajorIssues": "1",
+ "fInfoIssues": "4"
+ },
+ "tabs": ["scm", "coverage", "duplications"],
+ "manual_rules": [
+ {
+ "key": "manual:api",
+ "name": "API"
+ },
+ {
+ "key": "manual:design",
+ "name": "Design"
+ },
+ {
+ "key": "manual:error_handling",
+ "name": "Error handling"
+ },
+ {
+ "key": "manual:performance",
+ "name": "Performance"
+ },
+ {
+ "key": "manual:sql_pitfalls",
+ "name": "SQL Pitfall"
+ }
+ ]}
--- /dev/null
+{"coverage": [
+ [46, true, 32, null, null],
+ [47, true, 32, null, null],
+ [48, true, 32, null, null],
+ [49, true, 32, null, null],
+ [52, true, 2, null, null],
+ [53, true, 2, null, null],
+ [57, true, 18, null, null],
+ [58, true, 18, null, null],
+ [62, true, 13, null, null],
+ [63, true, 13, null, null],
+ [67, false, null, null, null],
+ [68, false, null, null, null],
+ [73, true, 27, null, null],
+ [74, true, 27, null, null],
+ [75, true, 27, null, null],
+ [76, true, 1, null, null],
+ [77, true, 1, null, null],
+ [85, true, 5, null, null],
+ [86, true, 5, null, null],
+ [94, true, 10, null, null],
+ [95, true, 10, null, null],
+ [103, true, 11, null, null],
+ [104, true, 11, null, null],
+ [112, false, null, null, null],
+ [113, false, null, null, null],
+ [120, true, 17, null, null],
+ [121, true, 17, 2, 2],
+ [122, true, 8, null, null],
+ [124, true, 13, null, null],
+ [125, false, null, null, null],
+ [127, false, null, null, null],
+ [132, true, 4, null, null],
+ [133, true, 4, null, null],
+ [137, true, 3, null, null],
+ [138, true, 3, null, null],
+ [142, true, 5, null, null],
+ [143, true, 5, null, null],
+ [147, false, null, null, null],
+ [148, false, null, null, null],
+ [153, true, 7, null, null],
+ [154, true, 7, null, null],
+ [155, false, null, null, null],
+ [157, false, null, null, null],
+ [162, true, 3, null, null],
+ [163, true, 3, null, null],
+ [167, true, 3, null, null],
+ [168, true, 3, null, null],
+ [172, true, 2, null, null],
+ [173, true, 2, null, null],
+ [177, false, null, null, null],
+ [178, false, null, null, null],
+ [183, true, 6, null, null],
+ [184, false, null, null, null],
+ [186, false, null, null, null],
+ [196, true, 5, null, null],
+ [197, true, 5, null, null],
+ [201, true, 2, null, null],
+ [202, true, 2, null, null],
+ [206, true, 1, null, null],
+ [207, true, 1, null, null],
+ [211, false, null, null, null],
+ [212, false, null, null, null],
+ [217, true, 5, null, null],
+ [218, true, 5, null, null],
+ [219, true, 5, null, null],
+ [220, true, 5, null, null],
+ [221, false, null, null, null],
+ [222, false, null, null, null],
+ [231, true, 4, null, null],
+ [232, true, 4, null, null],
+ [233, false, null, null, null],
+ [234, false, null, null, null],
+ [235, true, 4, null, null],
+ [236, true, 4, null, null],
+ [248, true, 4, null, null],
+ [249, true, 4, null, null],
+ [250, true, 4, null, null],
+ [251, true, 4, null, null],
+ [252, true, 4, null, null],
+ [253, true, 4, 2, 2],
+ [254, true, 2, null, null],
+ [256, true, 4, null, null],
+ [257, false, null, null, null],
+ [258, false, null, null, null],
+ [265, true, 1, null, null],
+ [266, true, 1, null, null],
+ [267, true, 1, null, null],
+ [268, true, 1, null, null],
+ [269, true, 1, null, null],
+ [270, true, 1, null, null],
+ [271, true, 1, 2, 2],
+ [272, true, 1, null, null],
+ [274, true, 1, null, null],
+ [275, false, null, null, null],
+ [276, false, null, null, null],
+ [287, true, 4, null, null],
+ [288, true, 4, null, null],
+ [289, true, 4, null, null],
+ [290, true, 4, null, null],
+ [291, true, 4, 2, 2],
+ [292, true, 3, null, null],
+ [294, true, 4, null, null],
+ [295, false, null, null, null],
+ [296, false, null, null, null],
+ [305, true, 1, null, null],
+ [306, true, 1, null, null],
+ [307, true, 1, null, null],
+ [308, true, 1, null, null],
+ [309, true, 1, null, null],
+ [310, false, null, null, null],
+ [311, false, null, null, null],
+ [316, false, null, null, null],
+ [324, true, 23, null, null],
+ [325, true, 23, null, null],
+ [326, true, 23, null, null],
+ [327, true, 23, null, null],
+ [328, true, 23, null, null],
+ [329, false, null, null, null],
+ [330, false, null, null, null],
+ [339, true, 16, null, null],
+ [340, true, 16, null, null],
+ [341, true, 16, null, null],
+ [342, true, 16, null, null],
+ [343, false, null, null, null],
+ [344, false, null, null, null],
+ [349, true, 9, null, null],
+ [350, true, 9, null, null],
+ [351, true, 9, null, null],
+ [355, true, 3, null, null],
+ [356, true, 3, null, null],
+ [357, true, 3, null, null],
+ [361, true, 7, null, null],
+ [362, true, 7, null, null],
+ [363, true, 7, null, null],
+ [366, true, 20, null, null],
+ [367, true, 20, null, null],
+ [368, true, 20, null, null],
+ [371, true, 18, null, null],
+ [372, true, 18, null, null],
+ [373, true, 18, null, null],
+ [376, false, null, null, null],
+ [377, false, null, 2, 0],
+ [378, false, null, null, null],
+ [380, false, null, null, null],
+ [389, true, 26, null, null],
+ [390, true, 26, null, null],
+ [391, true, 26, null, null],
+ [395, true, 26, null, null],
+ [403, true, 26, null, null],
+ [404, true, 26, null, null],
+ [405, true, 26, null, null],
+ [406, true, 26, null, null],
+ [411, true, 25, null, null],
+ [412, false, null, null, null],
+ [413, false, null, null, null],
+ [421, true, 23, null, null],
+ [422, false, null, null, null],
+ [423, false, null, null, null],
+ [424, true, 23, null, null],
+ [425, true, 23, 2, 1],
+ [426, true, 23, null, null],
+ [428, false, null, null, null],
+ [433, false, null, null, null],
+ [440, true, 10, null, null],
+ [441, true, 10, null, null],
+ [442, true, 10, null, null],
+ [446, true, 10, null, null],
+ [454, true, 10, null, null],
+ [455, true, 10, null, null],
+ [456, true, 10, null, null],
+ [457, true, 10, null, null],
+ [462, true, 10, null, null],
+ [463, false, null, null, null],
+ [464, false, null, null, null],
+ [472, true, 9, null, null],
+ [473, false, null, null, null],
+ [474, false, null, null, null],
+ [475, true, 9, null, null],
+ [476, true, 9, 2, 1],
+ [477, true, 9, null, null],
+ [478, true, 9, null, null],
+ [479, true, 9, null, null],
+ [480, true, 9, 2, 2],
+ [481, true, 9, null, null],
+ [483, true, 9, null, null],
+ [485, false, null, null, null],
+ [490, false, null, null, null],
+ [498, true, 16, null, null],
+ [499, true, 16, null, null],
+ [500, true, 16, null, null],
+ [501, true, 16, null, null],
+ [504, true, 14, null, null],
+ [509, true, 14, null, null],
+ [514, false, null, null, null]
+]}
--- /dev/null
+{
+ "issue": {
+ "key": "e69e2012-c58e-4c37-9e0e-9595576de9de",
+ "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "componentId": null,
+ "project": "org.codehaus.sonar:sonar",
+ "rule": "manual:api",
+ "status": "OPEN",
+ "severity": "MAJOR",
+ "message": "An issue message",
+ "line": 3,
+ "reporter": "admin",
+ "creationDate": "2014-12-08T14:22:49+0100",
+ "updateDate": "2014-12-08T14:22:49+0100",
+ "fUpdateAge": "less than a minute"
+ }
+}
--- /dev/null
+{"duplications": [
+ {
+ "blocks": [
+ {
+ "from": 404,
+ "size": 15,
+ "_ref": "1"
+ },
+ {
+ "from": 455,
+ "size": 15,
+ "_ref": "2"
+ }
+ ]
+ }
+], "files": {
+ "1": {
+ "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "name": "src/main/java/org/sonar/batch/index/Cache.java",
+ "project": "org.codehaus.sonar:sonar",
+ "projectName": "SonarQube",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "subProjectName": "SonarQube :: Batch"
+ },
+ "2": {
+ "key": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin:src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
+ "name": "src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
+ "project": "org.codehaus.sonar-plugins.javascript:javascript",
+ "projectName": "JavaScript",
+ "subProject": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin",
+ "subProjectName": "JavaScript :: Sonar Plugin"
+ }
+}}
--- /dev/null
+{"duplications": [
+ {
+ "blocks": [
+ {
+ "from": 404,
+ "size": 15,
+ "_ref": "1"
+ },
+ {
+ "from": 455,
+ "size": 15
+ }
+ ]
+ }
+], "files": {
+ "1": {
+ "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "name": "src/main/java/org/sonar/batch/index/Cache.java",
+ "project": "org.codehaus.sonar:sonar",
+ "projectName": "SonarQube",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "subProjectName": "SonarQube :: Batch"
+ }
+}}
--- /dev/null
+{"duplications": [
+ {
+ "blocks": [
+ {
+ "from": 404,
+ "size": 15,
+ "_ref": "1"
+ },
+ {
+ "from": 455,
+ "size": 15,
+ "_ref": "1"
+ }
+ ]
+ }
+], "files": {
+ "1": {
+ "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "name": "src/main/java/org/sonar/batch/index/Cache.java",
+ "project": "org.codehaus.sonar:sonar",
+ "projectName": "SonarQube",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "subProjectName": "SonarQube :: Batch"
+ }
+}}
--- /dev/null
+{"total": 6, "p": 1, "ps": 100, "projects": [
+ {
+ "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+ "key": "org.codehaus.sonar:sonar",
+ "id": 2865,
+ "qualifier": "TRK",
+ "name": "SonarQube",
+ "longName": "SonarQube"
+ }
+], "components": [
+ {
+ "uuid": "83379565-7af3-4047-8d1a-ed42b10309b0",
+ "key": "org.codehaus.sonar:sonar-batch",
+ "id": 1624,
+ "enabled": true,
+ "qualifier": "BRC",
+ "name": "SonarQube :: Batch",
+ "longName": "SonarQube :: Batch",
+ "path": "sonar-batch",
+ "projectId": 2865,
+ "subProjectId": 2865
+ },
+ {
+ "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+ "key": "org.codehaus.sonar:sonar",
+ "id": 2865,
+ "enabled": true,
+ "qualifier": "TRK",
+ "name": "SonarQube",
+ "longName": "SonarQube"
+ },
+ {
+ "uuid": "b9615992-2458-4d54-a22f-b91ee7ba5bc5",
+ "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "id": 19983,
+ "enabled": true,
+ "qualifier": "FIL",
+ "name": "Cache.java",
+ "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+ "path": "src/main/java/org/sonar/batch/index/Cache.java",
+ "projectId": 2865,
+ "subProjectId": 1624
+ }
+], "issues": [
+ {
+ "key": "20002ec7-b647-44da-bdf5-4d9fbf4b7c58",
+ "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "componentId": 19983,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "rule": "common-java:DuplicatedBlocks",
+ "status": "CONFIRMED",
+ "severity": "MAJOR",
+ "message": "2 duplicated blocks of code.",
+ "debt": "2h",
+ "creationDate": "2014-05-01T23:38:31+0200",
+ "updateDate": "2014-07-01T17:48:47+0200",
+ "fUpdateAge": "5 months",
+ "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+ "transitions": ["unconfirm", "resolve", "falsepositive"]
+ },
+ {
+ "key": "71a26f48-a90d-4a76-a745-4f6e6e8b1773",
+ "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "componentId": 19983,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "rule": "squid:S1135",
+ "status": "CONFIRMED",
+ "severity": "INFO",
+ "message": "Complete the task associated to this TODO comment.",
+ "line": 125,
+ "author": "simon.brandhof@gmail.com",
+ "creationDate": "2013-10-10T23:51:33+0200",
+ "updateDate": "2014-07-29T23:15:18+0200",
+ "fUpdateAge": "4 months",
+ "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+ "transitions": ["unconfirm", "resolve", "falsepositive"]
+ },
+ {
+ "key": "75419c88-0e3c-4311-aa47-fe5731e67558",
+ "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "componentId": 19983,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "rule": "squid:S1135",
+ "status": "CONFIRMED",
+ "severity": "INFO",
+ "message": "Complete the task associated to this TODO comment.",
+ "line": 155,
+ "author": "simon.brandhof@gmail.com",
+ "creationDate": "2013-10-10T23:51:33+0200",
+ "updateDate": "2014-07-29T23:15:18+0200",
+ "fUpdateAge": "4 months",
+ "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+ "transitions": ["unconfirm", "resolve", "falsepositive"]
+ },
+ {
+ "key": "01461208-6c1e-4cdf-9f27-b7afa78e76ec",
+ "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "componentId": 19983,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "rule": "squid:S1135",
+ "status": "CONFIRMED",
+ "severity": "INFO",
+ "message": "Complete the task associated to this TODO comment.",
+ "line": 184,
+ "author": "simon.brandhof@gmail.com",
+ "creationDate": "2013-10-10T23:51:33+0200",
+ "updateDate": "2014-07-29T23:15:18+0200",
+ "fUpdateAge": "4 months",
+ "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+ "transitions": ["unconfirm", "resolve", "falsepositive"]
+ },
+ {
+ "key": "e4de6481-7bfb-460a-8b3c-24459f9561d3",
+ "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "componentId": 19983,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "rule": "squid:S1135",
+ "status": "CONFIRMED",
+ "severity": "INFO",
+ "message": "Complete the task associated to this TODO comment.",
+ "line": 239,
+ "author": "Simon Brandhof",
+ "creationDate": "2013-08-09T16:04:33+0200",
+ "updateDate": "2014-07-29T23:15:18+0200",
+ "fUpdateAge": "4 months",
+ "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+ "transitions": ["unconfirm", "resolve", "falsepositive"]
+ },
+ {
+ "key": "59fc17f7-c977-4cb6-8f04-fbe88e4b9186",
+ "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "componentId": 19983,
+ "project": "org.codehaus.sonar:sonar",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "rule": "squid:S1192",
+ "status": "CONFIRMED",
+ "severity": "MINOR",
+ "message": "Define a constant instead of duplicating this literal \"Fail to get keys from cache \" 3 times.",
+ "line": 257,
+ "debt": "10min",
+ "author": "simon.brandhof@gmail.com",
+ "creationDate": "2014-02-20T07:48:16+0100",
+ "updateDate": "2014-02-24T16:57:34+0100",
+ "fUpdateAge": "9 months",
+ "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+ "transitions": ["unconfirm", "resolve", "falsepositive"]
+ }
+], "rules": [
+ {
+ "key": "common-java:DuplicatedBlocks",
+ "name": "Duplicated blocks",
+ "lang": "java",
+ "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S1192",
+ "name": "String literals should not be duplicated",
+ "lang": "java",
+ "desc": "<p>\n Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n prepare(\"action1\"); // Non-Compliant - \"action1\" is duplicated 3 times\n execute(\"action1\");\n release(\"action1\");\n}\n\n@SuppressWarning(\"all\") // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n System.out.println(\"'\" + a + \"'\"); // Compliant - literal \"'\" has less than 5 characters and is excluded\n return \"\"; // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\"; // Compliant\n\npublic void run() {\n prepare(ACTION_1); // Compliant\n execute(ACTION_1);\n release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
+ "status": "READY",
+ "langName": "Java"
+ },
+ {
+ "key": "squid:S1135",
+ "name": "TODO tags should be handled",
+ "lang": "java",
+ "desc": "<p>\n<code>TODO</code> tags are commonly used to mark places where some more code is required, but which the developer wants to implement later.\nSometimes the developer will not have the time or will simply forget to get back to that tag.\nThis rule is meant to track those tags, and ensure that they do not go unnoticed.\n</p>\n\n<p>The following code illustrates this rule:</p>\n\n<pre>\nvoid doSomething() {\n // TODO\n}\n</pre>",
+ "status": "READY",
+ "langName": "Java"
+ }
+], "users": [
+ {
+ "login": "admin",
+ "name": "Admin Admin",
+ "active": true,
+ "email": "admin@sonarsource.com"
+ }
+], "languages": [
+ {
+ "key": "js",
+ "name": "JavaScript"
+ },
+ {
+ "key": "java",
+ "name": "Java"
+ }
+], "maxResultsReached": false, "paging": {
+ "pageIndex": 1,
+ "pageSize": 100,
+ "total": 6,
+ "fTotal": "6",
+ "pages": 1
+}}
--- /dev/null
+{"sources": [
+ {
+ "line": 1,
+ "code": "<span class=\"cppd\">/*</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 2,
+ "code": "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+ "scmDate": "2013-04-21T11:58:14+0200"
+ },
+ {
+ "line": 3,
+ "code": "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
+ "scmDate": "2014-03-11T17:52:41+0100"
+ },
+ {
+ "line": 4,
+ "code": "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 5,
+ "code": "<span class=\"cppd\"> *</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 6,
+ "code": "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+ "scmDate": "2013-04-21T11:58:14+0200"
+ },
+ {
+ "line": 7,
+ "code": "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 8,
+ "code": "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 9,
+ "code": "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 10,
+ "code": "<span class=\"cppd\"> *</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 11,
+ "code": "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+ "scmDate": "2013-04-21T11:58:14+0200"
+ },
+ {
+ "line": 12,
+ "code": "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 13,
+ "code": "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 14,
+ "code": "<span class=\"cppd\"> * Lesser General Public License for more details.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 15,
+ "code": "<span class=\"cppd\"> *</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 16,
+ "code": "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+ "scmDate": "2013-04-22T09:37:03+0200"
+ },
+ {
+ "line": 17,
+ "code": "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+ "scmDate": "2013-04-22T09:37:03+0200"
+ },
+ {
+ "line": 18,
+ "code": "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+ "scmDate": "2013-04-22T09:37:03+0200"
+ },
+ {
+ "line": 19,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 20,
+ "code": "<span class=\"k\">package</span> org.sonar.batch.index;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 21,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 22,
+ "code": "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-1 sym\">Sets</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 23,
+ "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-2 sym\">Exchange</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 24,
+ "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-3 sym\">Key</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 25,
+ "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-4 sym\">KeyFilter</span>;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 26,
+ "code": "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-5 sym\">PersistitException</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 27,
+ "code": "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-6 sym\">ToStringBuilder</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 28,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 29,
+ "code": "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-7 sym\">CheckForNull</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 30,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 31,
+ "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-8 sym\">Iterator</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 32,
+ "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-9 sym\">NoSuchElementException</span>;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 33,
+ "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-10 sym\">Set</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 34,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 35,
+ "code": "<span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 36,
+ "code": "<span class=\"cppd\"> * <p></span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 37,
+ "code": "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 38,
+ "code": "<span class=\"cppd\"> * </p></span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 39,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 40,
+ "code": "<span class=\"k\">public </span><span class=\"k\">class</span> <span class=\"sym-11 sym\">Cache</span><V> {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+ "scmDate": "2014-07-25T16:31:45+0200"
+ },
+ {
+ "line": 41,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 42,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-12 sym\">name</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 43,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-13 sym\">exchange</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 44,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 45,
+ "code": " <span class=\"sym-14 sym\">Cache</span>(String <span class=\"sym-15 sym\">name</span>, <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-16 sym\">exchange</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 46,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-12 sym\">name</span> = <span class=\"sym-15 sym\">name</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 47,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-13 sym\">exchange</span> = <span class=\"sym-16 sym\">exchange</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 48,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 49,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 50,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-17 sym\">put</span>(Object <span class=\"sym-18 sym\">key</span>, V <span class=\"sym-19 sym\">value</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 51,
+ "code": " <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-18 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 52,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-19 sym\">value</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 53,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 54,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 55,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-20 sym\">put</span>(Object <span class=\"sym-21 sym\">firstKey</span>, Object <span class=\"sym-22 sym\">secondKey</span>, V <span class=\"sym-23 sym\">value</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 56,
+ "code": " <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-21 sym\">firstKey</span>, <span class=\"sym-22 sym\">secondKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 57,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-23 sym\">value</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 58,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 59,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 60,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-24 sym\">put</span>(Object <span class=\"sym-25 sym\">firstKey</span>, Object <span class=\"sym-26 sym\">secondKey</span>, Object <span class=\"sym-27 sym\">thirdKey</span>, V <span class=\"sym-28 sym\">value</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 61,
+ "code": " <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-25 sym\">firstKey</span>, <span class=\"sym-26 sym\">secondKey</span>, <span class=\"sym-27 sym\">thirdKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 62,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-28 sym\">value</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 63,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 64,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 65,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-29 sym\">put</span>(Object[] <span class=\"sym-30 sym\">key</span>, V <span class=\"sym-31 sym\">value</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 66,
+ "code": " <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-30 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 67,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-31 sym\">value</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 68,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 69,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 70,
+ "code": " <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-32 sym\">doPut</span>(V <span class=\"sym-33 sym\">value</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 71,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 72,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.getValue().put(<span class=\"sym-33 sym\">value</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 73,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.store();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 74,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">this</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 75,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-34 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 76,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-34 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 77,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 78,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 79,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 80,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 81,
+ "code": "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 82,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 83,
+ "code": " <span class=\"k\">public </span>V <span class=\"sym-35 sym\">get</span>(Object <span class=\"sym-36 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 84,
+ "code": " <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-36 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 85,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 86,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 87,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 88,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 89,
+ "code": "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 90,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 91,
+ "code": " <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 92,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-37 sym\">get</span>(Object <span class=\"sym-38 sym\">firstKey</span>, Object <span class=\"sym-39 sym\">secondKey</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 93,
+ "code": " <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-38 sym\">firstKey</span>, <span class=\"sym-39 sym\">secondKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 94,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 95,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 96,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 97,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 98,
+ "code": "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 99,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 100,
+ "code": " <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 101,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-40 sym\">get</span>(Object <span class=\"sym-41 sym\">firstKey</span>, Object <span class=\"sym-42 sym\">secondKey</span>, Object <span class=\"sym-43 sym\">thirdKey</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 102,
+ "code": " <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-41 sym\">firstKey</span>, <span class=\"sym-42 sym\">secondKey</span>, <span class=\"sym-43 sym\">thirdKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 103,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 104,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 105,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 106,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 107,
+ "code": "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 108,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 109,
+ "code": " <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 110,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-44 sym\">get</span>(Object[] <span class=\"sym-45 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 111,
+ "code": " <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-45 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 112,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 113,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 114,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 115,
+ "code": " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 116,
+ "code": " <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 117,
+ "code": "<span class=\"a\"> </span><span class=\"k\">private </span>V <span class=\"sym-46 sym\">doGet</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 118,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 119,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.fetch();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 120,
+ "code": " <span class=\"k\">if </span>(!<span class=\"sym-13 sym\">exchange</span>.getValue().isDefined()) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1,
+ "conditions": 2,
+ "coveredConditions": 2
+ },
+ {
+ "line": 121,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">null</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 122,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 123,
+ "code": " <span class=\"k\">return</span> (V) <span class=\"sym-13 sym\">exchange</span>.getValue().get();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 124,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-47 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 125,
+ "code": " <span class=\"cppd\">// TODO add parameters to message</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200"
+ },
+ {
+ "line": 126,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-47 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 127,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 128,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 129,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 130,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-48 sym\">containsKey</span>(Object <span class=\"sym-49 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 131,
+ "code": " <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-49 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 132,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 133,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 134,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 135,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-50 sym\">containsKey</span>(Object <span class=\"sym-51 sym\">firstKey</span>, Object <span class=\"sym-52 sym\">secondKey</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 136,
+ "code": " <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-51 sym\">firstKey</span>, <span class=\"sym-52 sym\">secondKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 137,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 138,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 139,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 140,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-53 sym\">containsKey</span>(Object <span class=\"sym-54 sym\">firstKey</span>, Object <span class=\"sym-55 sym\">secondKey</span>, Object <span class=\"sym-56 sym\">thirdKey</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 141,
+ "code": " <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-54 sym\">firstKey</span>, <span class=\"sym-55 sym\">secondKey</span>, <span class=\"sym-56 sym\">thirdKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 142,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 143,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 144,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 145,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-57 sym\">containsKey</span>(Object[] <span class=\"sym-58 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 146,
+ "code": " <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-58 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 147,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 148,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 149,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 150,
+ "code": " <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-59 sym\">doContainsKey</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 151,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200"
+ },
+ {
+ "line": 152,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.fetch();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 153,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.isValueDefined();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 154,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-60 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 155,
+ "code": " <span class=\"cppd\">// TODO add parameters to message</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200"
+ },
+ {
+ "line": 156,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-60 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 157,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200"
+ },
+ {
+ "line": 158,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200"
+ },
+ {
+ "line": 159,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200"
+ },
+ {
+ "line": 160,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-61 sym\">remove</span>(Object <span class=\"sym-62 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 161,
+ "code": " <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-62 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 162,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 163,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 164,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 165,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-63 sym\">remove</span>(Object <span class=\"sym-64 sym\">firstKey</span>, Object <span class=\"sym-65 sym\">secondKey</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 166,
+ "code": " <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-64 sym\">firstKey</span>, <span class=\"sym-65 sym\">secondKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 167,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 168,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 169,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 170,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-66 sym\">remove</span>(Object <span class=\"sym-67 sym\">firstKey</span>, Object <span class=\"sym-68 sym\">secondKey</span>, Object <span class=\"sym-69 sym\">thirdKey</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 171,
+ "code": " <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-67 sym\">firstKey</span>, <span class=\"sym-68 sym\">secondKey</span>, <span class=\"sym-69 sym\">thirdKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 172,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 173,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 174,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 175,
+ "code": " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-70 sym\">remove</span>(Object[] <span class=\"sym-71 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 176,
+ "code": " <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-71 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 177,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 178,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 179,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 180,
+ "code": " <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-72 sym\">doRemove</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 181,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 182,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.remove();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "6f1161efb92298ace498df544e38f6f97216ec36",
+ "scmDate": "2013-04-26T15:19:16+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 183,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-73 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 184,
+ "code": " <span class=\"cppd\">// TODO add parameters to message</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+ "scmDate": "2013-10-10T12:18:02+0200"
+ },
+ {
+ "line": 185,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-73 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 186,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 187,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 188,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 189,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 190,
+ "code": "<span class=\"cppd\"> * Removes everything in the specified group.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 191,
+ "code": "<span class=\"cppd\"> *</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 192,
+ "code": "<span class=\"cppd\"> * @param group The group name.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 193,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 194,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-74 sym\">clear</span>(Object <span class=\"sym-75 sym\">key</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 195,
+ "code": " <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-75 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 196,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 197,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 198,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 199,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-76 sym\">clear</span>(Object <span class=\"sym-77 sym\">firstKey</span>, Object <span class=\"sym-78 sym\">secondKey</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 200,
+ "code": " <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-77 sym\">firstKey</span>, <span class=\"sym-78 sym\">secondKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 201,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 202,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 203,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 204,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-79 sym\">clear</span>(Object <span class=\"sym-80 sym\">firstKey</span>, Object <span class=\"sym-81 sym\">secondKey</span>, Object <span class=\"sym-82 sym\">thirdKey</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 205,
+ "code": " <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-80 sym\">firstKey</span>, <span class=\"sym-81 sym\">secondKey</span>, <span class=\"sym-82 sym\">thirdKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 206,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 207,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 208,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 209,
+ "code": " <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-83 sym\">clear</span>(Object[] <span class=\"sym-84 sym\">key</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 210,
+ "code": " <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-84 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 211,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 212,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 213,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 214,
+ "code": " <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span><V> <span class=\"sym-85 sym\">doClear</span>() {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 215,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 216,
+ "code": " <span class=\"sym-3 sym\">Key</span> <span class=\"sym-86 sym\">to</span> = <span class=\"k\">new</span> <span class=\"sym-3 sym\">Key</span>(<span class=\"sym-13 sym\">exchange</span>.getKey());",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 217,
+ "code": " <span class=\"sym-86 sym\">to</span>.append(<span class=\"sym-3 sym\">Key</span>.AFTER);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 218,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.removeKeyRange(<span class=\"sym-13 sym\">exchange</span>.getKey(), <span class=\"sym-86 sym\">to</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 219,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">this</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 220,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-87 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 221,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-87 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 222,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 223,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 224,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 225,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 226,
+ "code": "<span class=\"cppd\"> * Clears the default as well as all group caches.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 227,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 228,
+ "code": " <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-88 sym\">clear</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 229,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 230,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 231,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.removeAll();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 232,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-89 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 233,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-89 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 234,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 235,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 236,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 237,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 238,
+ "code": "<span class=\"cppd\"> * Returns the set of cache keys associated with this group.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 239,
+ "code": "<span class=\"cppd\"> * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 240,
+ "code": "<span class=\"cppd\"> *</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 241,
+ "code": "<span class=\"cppd\"> * @param group The group.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 242,
+ "code": "<span class=\"cppd\"> * @return The set of cache keys for this group.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 243,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 244,
+ "code": " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 245,
+ "code": " <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-90 sym\">keySet</span>(Object <span class=\"sym-91 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 246,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 247,
+ "code": " <span class=\"sym-10 sym\">Set</span><Object> <span class=\"sym-92 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 248,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 249,
+ "code": " <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-93 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 250,
+ "code": " <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-91 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 251,
+ "code": " <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 252,
+ "code": " <span class=\"k\">while </span>(<span class=\"sym-93 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1,
+ "conditions": 2,
+ "coveredConditions": 2
+ },
+ {
+ "line": 253,
+ "code": " <span class=\"sym-92 sym\">keys</span>.add(<span class=\"sym-93 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 254,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 255,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-92 sym\">keys</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 256,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-94 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 257,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-94 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 258,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 259,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 260,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 261,
+ "code": " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 262,
+ "code": " <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-95 sym\">keySet</span>(Object <span class=\"sym-96 sym\">firstKey</span>, Object <span class=\"sym-97 sym\">secondKey</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 263,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 264,
+ "code": " <span class=\"sym-10 sym\">Set</span><Object> <span class=\"sym-98 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 265,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 266,
+ "code": " <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-99 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 267,
+ "code": " <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-96 sym\">firstKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 268,
+ "code": " <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-97 sym\">secondKey</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 269,
+ "code": " <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 270,
+ "code": " <span class=\"k\">while </span>(<span class=\"sym-99 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1,
+ "conditions": 2,
+ "coveredConditions": 2
+ },
+ {
+ "line": 271,
+ "code": " <span class=\"sym-98 sym\">keys</span>.add(<span class=\"sym-99 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 272,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 273,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-98 sym\">keys</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 274,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-100 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 275,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-100 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 276,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 277,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 278,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 279,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 280,
+ "code": "<span class=\"cppd\"> * Returns the set of keys associated with this cache.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 281,
+ "code": "<span class=\"cppd\"> *</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 282,
+ "code": "<span class=\"cppd\"> * @return The set containing the keys for this cache.</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 283,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 284,
+ "code": " <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span><Object> <span class=\"sym-101 sym\">keySet</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 285,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 286,
+ "code": " <span class=\"sym-10 sym\">Set</span><Object> <span class=\"sym-102 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 287,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 288,
+ "code": " <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-103 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 289,
+ "code": " <span class=\"sym-103 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 290,
+ "code": " <span class=\"k\">while </span>(<span class=\"sym-103 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1,
+ "conditions": 2,
+ "coveredConditions": 2
+ },
+ {
+ "line": 291,
+ "code": " <span class=\"sym-102 sym\">keys</span>.add(<span class=\"sym-103 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 292,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 293,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-102 sym\">keys</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 294,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-104 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 295,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-104 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 296,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 297,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 298,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 299,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 300,
+ "code": "<span class=\"cppd\"> * Lazy-loading values for given keys</span>",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 301,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 302,
+ "code": " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-105 sym\">values</span>(Object <span class=\"sym-106 sym\">firstKey</span>, Object <span class=\"sym-107 sym\">secondKey</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 303,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 304,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 305,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-106 sym\">firstKey</span>).append(<span class=\"sym-107 sym\">secondKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 306,
+ "code": " <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-108 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 307,
+ "code": " <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-109 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-106 sym\">firstKey</span>)).append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-107 sym\">secondKey</span>));",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 308,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span><V>(<span class=\"sym-108 sym\">iteratorExchange</span>, <span class=\"sym-109 sym\">filter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 309,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-110 sym\">e</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 310,
+ "code": " <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-110 sym\">e</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+ "scmDate": "2014-06-20T14:13:01+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 311,
+ "code": " }",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 312,
+ "code": " }",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+ "scmDate": "2014-06-20T14:13:01+0200"
+ },
+ {
+ "line": 313,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+ "scmDate": "2014-06-20T14:13:01+0200"
+ },
+ {
+ "line": 314,
+ "code": " <span class=\"k\">private </span>IllegalStateException <span class=\"sym-111 sym\">failToGetValues</span>(Exception <span class=\"sym-112 sym\">e</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+ "scmDate": "2014-06-20T14:13:01+0200"
+ },
+ {
+ "line": 315,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-112 sym\">e</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+ "scmDate": "2014-06-20T14:13:01+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 316,
+ "code": " }",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 317,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 318,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 319,
+ "code": "<span class=\"cppd\"> * Lazy-loading values for a given key</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 320,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 321,
+ "code": " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-113 sym\">values</span>(Object <span class=\"sym-114 sym\">firstKey</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 322,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 323,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 324,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-114 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 325,
+ "code": " <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-115 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 326,
+ "code": " <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-116 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-114 sym\">firstKey</span>));",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 327,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span><V>(<span class=\"sym-115 sym\">iteratorExchange</span>, <span class=\"sym-116 sym\">filter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 328,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-117 sym\">e</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+ "scmDate": "2014-04-23T14:41:32+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 329,
+ "code": " <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-117 sym\">e</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+ "scmDate": "2014-06-20T14:13:01+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 330,
+ "code": " }",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 331,
+ "code": " }",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 332,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 333,
+ "code": " <span class=\"cppd\">/**</span>",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+ "scmDate": "2014-04-23T14:41:32+0200"
+ },
+ {
+ "line": 334,
+ "code": "<span class=\"cppd\"> * Lazy-loading values</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 335,
+ "code": "<span class=\"cppd\"> */</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 336,
+ "code": " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-118 sym\">values</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 337,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 338,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 339,
+ "code": " <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-119 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 340,
+ "code": " <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-120 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 341,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span><V>(<span class=\"sym-119 sym\">iteratorExchange</span>, <span class=\"sym-120 sym\">filter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 342,
+ "code": " } <span class=\"k\">catch </span>(Exception <span class=\"sym-121 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 343,
+ "code": " <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-121 sym\">e</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+ "scmDate": "2014-06-20T14:13:01+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 344,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 345,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 346,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 347,
+ "code": " <span class=\"k\">public </span>Iterable<<span class=\"sym-177 sym\">Entry</span><V>> <span class=\"sym-122 sym\">entries</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 348,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear().to(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 349,
+ "code": " <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-123 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 350,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span><V>(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-123 sym\">filter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 351,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 352,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 353,
+ "code": " <span class=\"k\">public </span>Iterable<<span class=\"sym-177 sym\">Entry</span><V>> <span class=\"sym-124 sym\">entries</span>(Object <span class=\"sym-125 sym\">firstKey</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 354,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-125 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 355,
+ "code": " <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-126 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-125 sym\">firstKey</span>));",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 356,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span><V>(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-126 sym\">filter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 357,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 358,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 359,
+ "code": " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-127 sym\">resetKey</span>(Object <span class=\"sym-128 sym\">key</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 360,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 361,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-128 sym\">key</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 362,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 363,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 364,
+ "code": " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-129 sym\">resetKey</span>(Object <span class=\"sym-130 sym\">first</span>, Object <span class=\"sym-131 sym\">second</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 365,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 366,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-130 sym\">first</span>).append(<span class=\"sym-131 sym\">second</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 367,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 368,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 369,
+ "code": " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-132 sym\">resetKey</span>(Object <span class=\"sym-133 sym\">first</span>, Object <span class=\"sym-134 sym\">second</span>, Object <span class=\"sym-135 sym\">third</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 370,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 371,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-133 sym\">first</span>).append(<span class=\"sym-134 sym\">second</span>).append(<span class=\"sym-135 sym\">third</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 372,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 373,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 374,
+ "code": " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-136 sym\">resetKey</span>(Object[] <span class=\"sym-137 sym\">keys</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 375,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 376,
+ "code": " <span class=\"k\">for</span> (Object <span class=\"sym-138 sym\">o</span> : <span class=\"sym-137 sym\">keys</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0,
+ "conditions": 2,
+ "coveredConditions": 0
+ },
+ {
+ "line": 377,
+ "code": " <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-138 sym\">o</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 378,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 379,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 380,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "7b301db8c7e3000ff2a04fce5534e45e7d973a1f",
+ "scmDate": "2014-04-25T11:17:09+0200"
+ },
+ {
+ "line": 381,
+ "code": " <span class=\"cppd\">//</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 382,
+ "code": " <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 383,
+ "code": " <span class=\"cppd\">//</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 384,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 385,
+ "code": " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-139 sym\">ValueIterable</span><T> <span class=\"k\">implements</span> Iterable<T> {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+ "scmDate": "2014-07-25T16:31:45+0200"
+ },
+ {
+ "line": 386,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-8 sym\">Iterator</span><T> <span class=\"sym-140 sym\">iterator</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 387,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 388,
+ "code": " <span class=\"k\">private </span><span class=\"sym-141 sym\">ValueIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-143 sym\">keyFilter</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 389,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-140 sym\">iterator</span> = <span class=\"k\">new</span> <span class=\"sym-145 sym\">ValueIterator</span><T>(<span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-143 sym\">keyFilter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 390,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 391,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 392,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 393,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span><T> <span class=\"sym-144 sym\">iterator</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 394,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-140 sym\">iterator</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 395,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 396,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 397,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 398,
+ "code": " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-145 sym\">ValueIterator</span><T> <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span><T> {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+ "scmDate": "2014-07-25T16:31:45+0200"
+ },
+ {
+ "line": 399,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-146 sym\">exchange</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 400,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-147 sym\">keyFilter</span>;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 401,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 402,
+ "code": " <span class=\"k\">private </span><span class=\"sym-148 sym\">ValueIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-149 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-150 sym\">keyFilter</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 403,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-146 sym\">exchange</span> = <span class=\"sym-149 sym\">exchange</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 404,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-147 sym\">keyFilter</span> = <span class=\"sym-150 sym\">keyFilter</span>;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 405,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 406,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 407,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 408,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-151 sym\">hasNext</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 409,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 410,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-146 sym\">exchange</span>.hasNext(<span class=\"sym-147 sym\">keyFilter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 411,
+ "code": " } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-152 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 0,
+ "duplicated": true
+ },
+ {
+ "line": 412,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-152 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 0,
+ "duplicated": true
+ },
+ {
+ "line": 413,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 414,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 415,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 416,
+ "code": " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "duplicated": true
+ },
+ {
+ "line": 417,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "duplicated": true
+ },
+ {
+ "line": 418,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span>T <span class=\"sym-153 sym\">next</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 419,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 420,
+ "code": " <span class=\"sym-146 sym\">exchange</span>.next(<span class=\"sym-147 sym\">keyFilter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 421,
+ "code": " } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-154 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 422,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-154 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 423,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 424,
+ "code": " <span class=\"k\">if </span>(<span class=\"sym-146 sym\">exchange</span>.getValue().isDefined()) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200",
+ "lineHits": 1,
+ "conditions": 2,
+ "coveredConditions": 1
+ },
+ {
+ "line": 425,
+ "code": " <span class=\"k\">return</span> (T) <span class=\"sym-146 sym\">exchange</span>.getValue().get();",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 426,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 427,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 428,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 429,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 430,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 431,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-155 sym\">remove</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+ "scmDate": "2013-05-29T14:27:38+0200"
+ },
+ {
+ "line": 432,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
+ "scmDate": "2014-02-24T14:21:50+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 433,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 434,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 435,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 436,
+ "code": " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-156 sym\">EntryIterable</span><T> <span class=\"k\">implements</span> Iterable<<span class=\"sym-177 sym\">Entry</span><T>> {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+ "scmDate": "2014-07-25T16:31:45+0200"
+ },
+ {
+ "line": 437,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-162 sym\">EntryIterator</span><T> <span class=\"sym-157 sym\">it</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 438,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 439,
+ "code": " <span class=\"k\">private </span><span class=\"sym-158 sym\">EntryIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-160 sym\">keyFilter</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 440,
+ "code": " <span class=\"sym-157 sym\">it</span> = <span class=\"k\">new</span> <span class=\"sym-162 sym\">EntryIterator</span><T>(<span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-160 sym\">keyFilter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 441,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 442,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 443,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 444,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span><<span class=\"sym-177 sym\">Entry</span><T>> <span class=\"sym-161 sym\">iterator</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 445,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-157 sym\">it</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 446,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 447,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 448,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 449,
+ "code": " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-162 sym\">EntryIterator</span><T> <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span><<span class=\"sym-177 sym\">Entry</span><T>> {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+ "scmDate": "2014-07-25T16:31:45+0200"
+ },
+ {
+ "line": 450,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-163 sym\">exchange</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 451,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-164 sym\">keyFilter</span>;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 452,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 453,
+ "code": " <span class=\"k\">private </span><span class=\"sym-165 sym\">EntryIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-166 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-167 sym\">keyFilter</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 454,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-163 sym\">exchange</span> = <span class=\"sym-166 sym\">exchange</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 455,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-164 sym\">keyFilter</span> = <span class=\"sym-167 sym\">keyFilter</span>;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 456,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 457,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 458,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 459,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-168 sym\">hasNext</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 460,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 461,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-163 sym\">exchange</span>.hasNext(<span class=\"sym-164 sym\">keyFilter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1,
+ "duplicated": true
+ },
+ {
+ "line": 462,
+ "code": " } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-169 sym\">e</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 0,
+ "duplicated": true
+ },
+ {
+ "line": 463,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-169 sym\">e</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 0,
+ "duplicated": true
+ },
+ {
+ "line": 464,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 465,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 466,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 467,
+ "code": " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "duplicated": true
+ },
+ {
+ "line": 468,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "duplicated": true
+ },
+ {
+ "line": 469,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-177 sym\">Entry</span><T> <span class=\"sym-170 sym\">next</span>() {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 470,
+ "code": " <span class=\"k\">try </span>{",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 471,
+ "code": " <span class=\"sym-163 sym\">exchange</span>.next(<span class=\"sym-164 sym\">keyFilter</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 472,
+ "code": " } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-171 sym\">e</span>) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 473,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-171 sym\">e</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 474,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 475,
+ "code": " <span class=\"k\">if </span>(<span class=\"sym-163 sym\">exchange</span>.getValue().isDefined()) {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1,
+ "conditions": 2,
+ "coveredConditions": 1
+ },
+ {
+ "line": 476,
+ "code": " T <span class=\"sym-172 sym\">value</span> = (T) <span class=\"sym-163 sym\">exchange</span>.getValue().get();",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 477,
+ "code": " <span class=\"sym-3 sym\">Key</span> <span class=\"sym-173 sym\">key</span> = <span class=\"sym-163 sym\">exchange</span>.getKey();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 478,
+ "code": " Object[] <span class=\"sym-174 sym\">array</span> = <span class=\"k\">new</span> Object[<span class=\"sym-173 sym\">key</span>.getDepth()];",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 479,
+ "code": " <span class=\"k\">for</span> (<span class=\"k\">int </span><span class=\"sym-175 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-175 sym\">i</span> < <span class=\"sym-173 sym\">key</span>.getDepth(); <span class=\"sym-175 sym\">i</span>++) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1,
+ "conditions": 2,
+ "coveredConditions": 2
+ },
+ {
+ "line": 480,
+ "code": " <span class=\"sym-174 sym\">array</span>[<span class=\"sym-175 sym\">i</span>] = <span class=\"sym-173 sym\">key</span>.indexTo(<span class=\"sym-175 sym\">i</span> - <span class=\"sym-173 sym\">key</span>.getDepth()).decode();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 481,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 482,
+ "code": " <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-177 sym\">Entry</span><T>(<span class=\"sym-174 sym\">array</span>, <span class=\"sym-172 sym\">value</span>);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 483,
+ "code": " }",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 484,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 485,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 486,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 487,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 488,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-176 sym\">remove</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 489,
+ "code": " <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
+ "scmDate": "2014-02-24T14:21:50+0100",
+ "lineHits": 0
+ },
+ {
+ "line": 490,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 491,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 492,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 493,
+ "code": " <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-177 sym\">Entry</span><V> {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+ "scmDate": "2014-07-25T16:31:45+0200"
+ },
+ {
+ "line": 494,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-178 sym\">key</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 495,
+ "code": " <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-179 sym\">value</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 496,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 497,
+ "code": " <span class=\"sym-180 sym\">Entry</span>(Object[] <span class=\"sym-181 sym\">key</span>, V <span class=\"sym-182 sym\">value</span>) {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100",
+ "lineHits": 1
+ },
+ {
+ "line": 498,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-178 sym\">key</span> = <span class=\"sym-181 sym\">key</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 499,
+ "code": " <span class=\"k\">this</span>.<span class=\"sym-179 sym\">value</span> = <span class=\"sym-182 sym\">value</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 500,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 501,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 502,
+ "code": " <span class=\"k\">public </span>Object[] <span class=\"sym-183 sym\">key</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 503,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-178 sym\">key</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 504,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 505,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 506,
+ "code": " <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 507,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-184 sym\">value</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 508,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-179 sym\">value</span>;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 1
+ },
+ {
+ "line": 509,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 510,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 511,
+ "code": " <span class=\"a\">@Override</span>",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 512,
+ "code": "<span class=\"a\"> </span><span class=\"k\">public </span>String <span class=\"sym-185 sym\">toString</span>() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 513,
+ "code": " <span class=\"k\">return</span> <span class=\"sym-6 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200",
+ "lineHits": 0
+ },
+ {
+ "line": 514,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 515,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 516,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "43fc31f75a2de06b23faefb0d2bbf1dd97290232",
+ "scmDate": "2014-05-05T16:43:19+0200"
+ },
+ {
+ "line": 517,
+ "code": "}",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 518,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ }
+]}
--- /dev/null
+[
+ {
+ "id": 19983,
+ "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "name": "Cache.java",
+ "scope": "FIL",
+ "qualifier": "FIL",
+ "date": "2014-07-21T23:18:51+0200",
+ "creationDate": "2013-04-17T04:06:45+0200",
+ "lname": "src/main/java/org/sonar/batch/index/Cache.java",
+ "lang": "java",
+ "msr": [
+ {
+ "key": "lines",
+ "val": 519.0,
+ "frmt_val": "519"
+ },
+ {
+ "key": "ncloc",
+ "val": 379.0,
+ "frmt_val": "379"
+ },
+ {
+ "key": "classes",
+ "val": 6.0,
+ "frmt_val": "6"
+ },
+ {
+ "key": "functions",
+ "val": 56.0,
+ "frmt_val": "56"
+ },
+ {
+ "key": "accessors",
+ "val": 0.0,
+ "frmt_val": "0"
+ },
+ {
+ "key": "statements",
+ "val": 174.0,
+ "frmt_val": "174"
+ },
+ {
+ "key": "public_api",
+ "val": 33.0,
+ "frmt_val": "33"
+ },
+ {
+ "key": "comment_lines",
+ "val": 23.0,
+ "frmt_val": "23"
+ },
+ {
+ "key": "comment_lines_density",
+ "val": 5.7,
+ "frmt_val": "5.7%"
+ },
+ {
+ "key": "public_documented_api_density",
+ "val": 36.4,
+ "frmt_val": "36.4%"
+ },
+ {
+ "key": "public_undocumented_api",
+ "val": 21.0,
+ "frmt_val": "21"
+ },
+ {
+ "key": "complexity",
+ "val": 116.0,
+ "frmt_val": "116"
+ },
+ {
+ "key": "function_complexity",
+ "val": 2.1,
+ "frmt_val": "2.1"
+ },
+ {
+ "key": "coverage",
+ "val": 74.3,
+ "frmt_val": "74.3%"
+ },
+ {
+ "key": "lines_to_cover",
+ "val": 194.0,
+ "frmt_val": "194"
+ },
+ {
+ "key": "uncovered_lines",
+ "val": 50.0,
+ "frmt_val": "50"
+ },
+ {
+ "key": "line_coverage",
+ "val": 74.2,
+ "frmt_val": "74.2%"
+ },
+ {
+ "key": "conditions_to_cover",
+ "val": 16.0,
+ "frmt_val": "16"
+ },
+ {
+ "key": "uncovered_conditions",
+ "val": 4.0,
+ "frmt_val": "4"
+ },
+ {
+ "key": "branch_coverage",
+ "val": 75.0,
+ "frmt_val": "75.0%"
+ },
+ {
+ "key": "duplicated_lines",
+ "val": 30.0,
+ "frmt_val": "30"
+ },
+ {
+ "key": "duplicated_blocks",
+ "val": 2.0,
+ "frmt_val": "2"
+ },
+ {
+ "key": "duplicated_files",
+ "val": 1.0,
+ "frmt_val": "1"
+ },
+ {
+ "key": "duplicated_lines_density",
+ "val": 5.8,
+ "frmt_val": "5.8%"
+ },
+ {
+ "key": "major_violations",
+ "val": 1.0,
+ "frmt_val": "1"
+ },
+ {
+ "key": "minor_violations",
+ "val": 1.0,
+ "frmt_val": "1"
+ },
+ {
+ "key": "info_violations",
+ "val": 4.0,
+ "frmt_val": "4"
+ }
+ ]
+ }
+]
--- /dev/null
+[
+ {
+ "id": 19983,
+ "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+ "name": "Cache.java",
+ "scope": "FIL",
+ "qualifier": "FIL",
+ "date": "2014-07-21T23:18:51+0200",
+ "creationDate": "2013-04-17T04:06:45+0200",
+ "lname": "src/main/java/org/sonar/batch/index/Cache.java",
+ "lang": "java",
+ "msr": [
+ {
+ "key": "lines",
+ "val": 519.0,
+ "frmt_val": "519"
+ },
+ {
+ "key": "ncloc",
+ "val": 379.0,
+ "frmt_val": "379"
+ },
+ {
+ "key": "classes",
+ "val": 6.0,
+ "frmt_val": "6"
+ },
+ {
+ "key": "functions",
+ "val": 56.0,
+ "frmt_val": "56"
+ },
+ {
+ "key": "accessors",
+ "val": 0.0,
+ "frmt_val": "0"
+ },
+ {
+ "key": "statements",
+ "val": 174.0,
+ "frmt_val": "174"
+ },
+ {
+ "key": "public_api",
+ "val": 33.0,
+ "frmt_val": "33"
+ },
+ {
+ "key": "comment_lines",
+ "val": 23.0,
+ "frmt_val": "23"
+ },
+ {
+ "key": "comment_lines_density",
+ "val": 5.7,
+ "frmt_val": "5.7%"
+ },
+ {
+ "key": "public_documented_api_density",
+ "val": 36.4,
+ "frmt_val": "36.4%"
+ },
+ {
+ "key": "public_undocumented_api",
+ "val": 21.0,
+ "frmt_val": "21"
+ },
+ {
+ "key": "complexity",
+ "val": 116.0,
+ "frmt_val": "116"
+ },
+ {
+ "key": "function_complexity",
+ "val": 2.1,
+ "frmt_val": "2.1"
+ },
+ {
+ "key": "coverage",
+ "val": 74.3,
+ "frmt_val": "74.3%"
+ },
+ {
+ "key": "lines_to_cover",
+ "val": 194.0,
+ "frmt_val": "194"
+ },
+ {
+ "key": "uncovered_lines",
+ "val": 50.0,
+ "frmt_val": "50"
+ },
+ {
+ "key": "line_coverage",
+ "val": 74.2,
+ "frmt_val": "74.2%"
+ },
+ {
+ "key": "conditions_to_cover",
+ "val": 16.0,
+ "frmt_val": "16"
+ },
+ {
+ "key": "uncovered_conditions",
+ "val": 4.0,
+ "frmt_val": "4"
+ },
+ {
+ "key": "branch_coverage",
+ "val": 75.0,
+ "frmt_val": "75.0%"
+ },
+ {
+ "key": "duplicated_lines",
+ "val": 30.0,
+ "frmt_val": "30"
+ },
+ {
+ "key": "duplicated_blocks",
+ "val": 2.0,
+ "frmt_val": "2"
+ },
+ {
+ "key": "duplicated_files",
+ "val": 1.0,
+ "frmt_val": "1"
+ },
+ {
+ "key": "duplicated_lines_density",
+ "val": 5.8,
+ "frmt_val": "5.8%"
+ },
+ {
+ "key": "major_violations",
+ "val": 1.0,
+ "frmt_val": "1"
+ },
+ {
+ "key": "minor_violations",
+ "val": 1.0,
+ "frmt_val": "1"
+ },
+ {
+ "key": "info_violations",
+ "val": 4.0,
+ "frmt_val": "4"
+ },
+ {
+ "key": "ncloc_data",
+ "data": "1=0;2=0;3=0;4=0;5=0;6=0;7=0;8=0;9=0;10=0;11=0;12=0;13=0;14=0;15=0;17=0;16=0;19=0;18=0;21=0;20=1;23=1;22=1;25=1;24=1;27=1;26=1;29=1;28=0;31=1;30=0;34=1;35=0;32=1;33=1;38=0;39=0;36=0;37=0;42=0;43=1;40=0;41=1;46=1;47=1;44=1;45=0;51=1;50=0;49=1;48=1;55=0;54=1;53=1;52=1;59=1;58=1;57=1;56=1;63=1;62=1;61=1;60=0;68=1;69=1;70=0;71=1;64=1;65=0;66=1;67=1;76=1;77=1;78=1;79=1;72=1;73=1;74=1;75=1;85=1;84=1;87=1;86=1;81=0;80=0;83=0;82=0;93=1;92=1;95=1;94=1;89=0;88=0;91=0;90=0;102=1;103=1;100=0;101=1;98=0;99=0;96=1;97=0;110=1;111=1;108=0;109=0;106=0;107=0;104=1;105=1;119=1;118=1;117=1;116=1;115=0;114=1;113=1;112=1;127=1;126=0;125=1;124=1;123=1;122=1;121=1;120=1;137=1;136=1;139=1;138=1;141=1;140=0;143=1;142=1;129=1;128=1;131=1;130=0;133=1;132=1;135=0;134=1;152=1;153=1;154=1;155=1;156=0;157=1;158=1;159=1;144=1;145=0;146=1;147=1;148=1;149=1;150=0;151=1;171=1;170=0;169=1;168=1;175=0;174=1;173=1;172=1;163=1;162=1;161=1;160=0;167=1;166=1;165=0;164=1;186=1;187=1;184=1;185=0;190=0;191=0;188=1;189=0;178=1;179=1;176=1;177=1;182=1;183=1;180=0;181=1;205=1;204=0;207=1;206=1;201=1;200=1;203=1;202=1;197=1;196=1;199=0;198=1;193=0;192=0;195=1;194=0;220=1;221=1;222=1;223=1;216=1;217=1;218=1;219=1;212=1;213=1;214=0;215=1;208=1;209=0;210=1;211=1;239=0;238=0;237=0;236=1;235=1;234=1;233=1;232=1;231=1;230=1;229=1;228=0;227=0;226=0;225=0;224=1;254=1;255=1;252=1;253=1;250=1;251=1;248=1;249=1;246=1;247=1;244=0;245=1;242=0;243=0;240=0;241=0;275=1;274=1;273=1;272=1;279=0;278=1;277=1;276=1;283=0;282=0;281=0;280=0;287=1;286=1;285=1;284=0;258=1;259=1;256=1;257=1;262=1;263=1;260=1;261=0;266=1;267=1;264=1;265=1;270=1;271=1;268=1;269=1;305=1;304=1;307=1;306=1;309=1;308=1;311=1;310=1;313=1;312=1;315=1;314=0;317=1;316=1;319=0;318=0;288=1;289=1;290=1;291=1;292=1;293=1;294=1;295=1;296=1;297=1;298=1;299=0;300=0;301=0;302=0;303=1;343=1;342=1;341=1;340=1;339=1;338=1;337=1;336=0;351=1;350=1;349=1;348=1;347=0;346=1;345=1;344=1;326=1;327=1;324=1;325=1;322=1;323=1;320=0;321=0;334=0;335=0;332=1;333=0;330=1;331=1;328=1;329=1;373=1;372=1;375=1;374=0;369=0;368=1;371=1;370=1;381=0;380=1;383=0;382=0;377=1;376=1;379=1;378=1;356=1;357=1;358=1;359=0;352=1;353=0;354=1;355=1;364=0;365=1;366=1;367=1;360=1;361=1;362=1;363=1;410=1;411=1;408=1;409=1;414=1;415=1;412=1;413=1;402=0;403=1;400=1;401=1;406=1;407=0;404=1;405=1;395=1;394=1;393=1;392=0;399=1;398=0;397=1;396=1;387=1;386=1;385=0;384=0;391=1;390=1;389=1;388=0;440=1;441=1;442=1;443=0;444=1;445=1;446=1;447=1;432=1;433=1;434=1;435=1;436=0;437=1;438=1;439=0;425=1;424=1;427=1;426=1;429=1;428=1;431=1;430=0;417=1;416=0;419=1;418=1;421=1;420=1;423=1;422=1;478=1;479=1;476=1;477=1;474=1;475=1;472=1;473=1;470=1;471=1;468=1;469=1;466=1;467=0;464=1;465=1;463=1;462=1;461=1;460=1;459=1;458=0;457=1;456=1;455=1;454=1;453=0;452=1;451=1;450=1;449=0;448=1;508=1;509=1;510=1;511=0;504=1;505=1;506=0;507=1;500=1;501=1;502=0;503=1;496=1;497=0;498=1;499=1;493=0;492=1;495=1;494=1;489=1;488=1;491=1;490=1;485=1;484=1;487=0;486=1;481=1;480=1;483=1;482=1;516=1;517=0;518=1;512=1;513=1;514=1;515=1"
+ }
+ ]
+ }
+]
--- /dev/null
+{"scm": [
+ [1, "simon.brandhof@gmail.com", "2013-04-16"],
+ [2, "simon.brandhof@gmail.com", "2013-04-21"],
+ [3, "simon.brandhof@gmail.com", "2014-03-11"],
+ [4, "simon.brandhof@gmail.com", "2013-04-16"],
+ [6, "simon.brandhof@gmail.com", "2013-04-21"],
+ [7, "simon.brandhof@gmail.com", "2013-04-16"],
+ [11, "simon.brandhof@gmail.com", "2013-04-21"],
+ [12, "simon.brandhof@gmail.com", "2013-04-16"],
+ [16, "simon.brandhof@gmail.com", "2013-04-22"],
+ [19, "simon.brandhof@gmail.com", "2013-04-16"],
+ [25, "julien.henry@sonarsource.com", "2014-05-01"],
+ [26, "simon.brandhof@gmail.com", "2013-04-17"],
+ [30, "julien.henry@sonarsource.com", "2014-04-30"],
+ [31, "simon.brandhof@gmail.com", "2013-04-16"],
+ [32, "simon.brandhof@gmail.com", "2013-04-17"],
+ [33, "julien.henry@sonarsource.com", "2014-05-01"],
+ [34, "simon.brandhof@gmail.com", "2013-04-16"],
+ [37, "simon.brandhof@gmail.com", "2013-04-17"],
+ [38, "simon.brandhof@gmail.com", "2013-04-16"],
+ [39, "simon.brandhof@gmail.com", "2013-04-17"],
+ [40, "simon.brandhof@gmail.com", "2013-04-16"],
+ [41, "simon.brandhof@gmail.com", "2014-02-20"],
+ [42, "simon.brandhof@gmail.com", "2013-04-16"],
+ [51, "julien.henry@sonarsource.com", "2014-05-01"],
+ [52, "simon.brandhof@gmail.com", "2014-02-20"],
+ [54, "simon.brandhof@gmail.com", "2013-04-16"],
+ [56, "julien.henry@sonarsource.com", "2014-05-01"],
+ [57, "simon.brandhof@gmail.com", "2014-02-20"],
+ [61, "julien.henry@sonarsource.com", "2014-05-01"],
+ [62, "simon.brandhof@gmail.com", "2014-02-20"],
+ [66, "julien.henry@sonarsource.com", "2014-05-01"],
+ [67, "simon.brandhof@gmail.com", "2014-02-20"],
+ [71, "julien.henry@sonarsource.com", "2014-05-01"],
+ [72, "simon.brandhof@gmail.com", "2013-04-16"],
+ [77, "simon.brandhof@gmail.com", "2013-05-29"],
+ [78, "simon.brandhof@gmail.com", "2013-04-16"],
+ [82, "simon.brandhof@gmail.com", "2014-02-20"],
+ [83, "simon.brandhof@gmail.com", "2013-04-16"],
+ [84, "simon.brandhof@gmail.com", "2014-02-20"],
+ [116, "julien.henry@sonarsource.com", "2014-05-01"],
+ [117, "simon.brandhof@gmail.com", "2014-02-20"],
+ [119, "simon.brandhof@gmail.com", "2013-04-16"],
+ [126, "simon.brandhof@gmail.com", "2013-10-10"],
+ [127, "simon.brandhof@gmail.com", "2013-05-29"],
+ [128, "simon.brandhof@gmail.com", "2013-04-16"],
+ [131, "simon.brandhof@gmail.com", "2014-02-20"],
+ [144, "simon.brandhof@gmail.com", "2013-04-16"],
+ [146, "simon.brandhof@gmail.com", "2014-02-20"],
+ [152, "simon.brandhof@gmail.com", "2013-10-10"],
+ [161, "simon.brandhof@gmail.com", "2014-02-20"],
+ [182, "simon.brandhof@gmail.com", "2013-04-16"],
+ [183, "simon.brandhof@gmail.com", "2013-04-26"],
+ [184, "simon.brandhof@gmail.com", "2013-04-16"],
+ [185, "simon.brandhof@gmail.com", "2013-10-10"],
+ [186, "simon.brandhof@gmail.com", "2013-05-29"],
+ [187, "simon.brandhof@gmail.com", "2013-04-16"],
+ [195, "julien.henry@sonarsource.com", "2014-05-01"],
+ [196, "simon.brandhof@gmail.com", "2014-02-20"],
+ [200, "julien.henry@sonarsource.com", "2014-05-01"],
+ [201, "simon.brandhof@gmail.com", "2014-02-20"],
+ [205, "julien.henry@sonarsource.com", "2014-05-01"],
+ [206, "simon.brandhof@gmail.com", "2014-02-20"],
+ [210, "julien.henry@sonarsource.com", "2014-05-01"],
+ [211, "simon.brandhof@gmail.com", "2014-02-20"],
+ [215, "julien.henry@sonarsource.com", "2014-05-01"],
+ [216, "simon.brandhof@gmail.com", "2013-04-16"],
+ [217, "simon.brandhof@gmail.com", "2014-02-20"],
+ [220, "simon.brandhof@gmail.com", "2013-04-16"],
+ [222, "simon.brandhof@gmail.com", "2014-02-20"],
+ [223, "simon.brandhof@gmail.com", "2013-04-16"],
+ [229, "simon.brandhof@gmail.com", "2014-02-20"],
+ [230, "simon.brandhof@gmail.com", "2013-04-16"],
+ [245, "julien.henry@sonarsource.com", "2014-05-01"],
+ [246, "simon.brandhof@gmail.com", "2014-02-20"],
+ [247, "simon.brandhof@gmail.com", "2013-04-16"],
+ [248, "simon.brandhof@gmail.com", "2014-02-20"],
+ [249, "simon.brandhof@gmail.com", "2013-04-16"],
+ [251, "simon.brandhof@gmail.com", "2014-02-20"],
+ [252, "simon.brandhof@gmail.com", "2013-04-16"],
+ [254, "simon.brandhof@gmail.com", "2014-02-20"],
+ [255, "simon.brandhof@gmail.com", "2013-04-16"],
+ [258, "simon.brandhof@gmail.com", "2013-05-29"],
+ [259, "simon.brandhof@gmail.com", "2013-04-16"],
+ [262, "julien.henry@sonarsource.com", "2014-05-01"],
+ [263, "simon.brandhof@gmail.com", "2014-02-20"],
+ [279, "simon.brandhof@gmail.com", "2013-04-16"],
+ [285, "simon.brandhof@gmail.com", "2014-02-20"],
+ [298, "simon.brandhof@gmail.com", "2013-04-16"],
+ [300, "simon.brandhof@gmail.com", "2013-05-29"],
+ [301, "julien.henry@sonarsource.com", "2014-04-30"],
+ [308, "julien.henry@sonarsource.com", "2014-05-01"],
+ [310, "julien.henry@sonarsource.com", "2014-04-30"],
+ [311, "julien.henry@sonarsource.com", "2014-06-20"],
+ [312, "julien.henry@sonarsource.com", "2014-04-30"],
+ [315, "julien.henry@sonarsource.com", "2014-06-20"],
+ [319, "julien.henry@sonarsource.com", "2014-04-30"],
+ [320, "simon.brandhof@gmail.com", "2014-02-20"],
+ [321, "simon.brandhof@gmail.com", "2013-05-29"],
+ [322, "julien.henry@sonarsource.com", "2014-05-01"],
+ [323, "simon.brandhof@gmail.com", "2013-04-16"],
+ [325, "julien.henry@sonarsource.com", "2014-05-01"],
+ [326, "simon.brandhof@gmail.com", "2013-04-16"],
+ [327, "julien.henry@sonarsource.com", "2014-05-01"],
+ [329, "simon.brandhof@gmail.com", "2013-04-16"],
+ [330, "julien.henry@sonarsource.com", "2014-06-20"],
+ [331, "simon.brandhof@gmail.com", "2013-04-16"],
+ [334, "simon.brandhof@gmail.com", "2013-05-29"],
+ [337, "simon.brandhof@gmail.com", "2013-04-16"],
+ [339, "simon.brandhof@gmail.com", "2014-02-20"],
+ [340, "simon.brandhof@gmail.com", "2013-04-16"],
+ [341, "julien.henry@sonarsource.com", "2014-05-01"],
+ [343, "simon.brandhof@gmail.com", "2013-04-16"],
+ [344, "julien.henry@sonarsource.com", "2014-06-20"],
+ [345, "simon.brandhof@gmail.com", "2013-04-16"],
+ [347, "simon.brandhof@gmail.com", "2013-04-17"],
+ [348, "simon.brandhof@gmail.com", "2014-02-20"],
+ [350, "julien.henry@sonarsource.com", "2014-05-01"],
+ [352, "simon.brandhof@gmail.com", "2013-04-17"],
+ [353, "simon.brandhof@gmail.com", "2014-02-20"],
+ [354, "julien.henry@sonarsource.com", "2014-05-01"],
+ [358, "simon.brandhof@gmail.com", "2013-04-17"],
+ [359, "simon.brandhof@gmail.com", "2014-02-20"],
+ [363, "simon.brandhof@gmail.com", "2013-04-17"],
+ [365, "simon.brandhof@gmail.com", "2014-02-20"],
+ [368, "simon.brandhof@gmail.com", "2013-04-17"],
+ [370, "simon.brandhof@gmail.com", "2014-02-20"],
+ [380, "simon.brandhof@gmail.com", "2013-04-17"],
+ [382, "simon.brandhof@gmail.com", "2013-05-29"],
+ [389, "julien.henry@sonarsource.com", "2014-05-01"],
+ [391, "simon.brandhof@gmail.com", "2013-05-29"],
+ [401, "julien.henry@sonarsource.com", "2014-05-01"],
+ [402, "simon.brandhof@gmail.com", "2013-05-29"],
+ [403, "julien.henry@sonarsource.com", "2014-05-01"],
+ [404, "simon.brandhof@gmail.com", "2013-05-29"],
+ [405, "julien.henry@sonarsource.com", "2014-05-01"],
+ [406, "simon.brandhof@gmail.com", "2013-05-29"],
+ [411, "julien.henry@sonarsource.com", "2014-05-01"],
+ [412, "simon.brandhof@gmail.com", "2013-05-29"],
+ [417, "julien.henry@sonarsource.com", "2014-05-01"],
+ [418, "simon.brandhof@gmail.com", "2013-05-29"],
+ [420, "simon.brandhof@gmail.com", "2014-02-20"],
+ [421, "julien.henry@sonarsource.com", "2014-05-01"],
+ [422, "simon.brandhof@gmail.com", "2014-02-20"],
+ [425, "simon.brandhof@gmail.com", "2013-05-29"],
+ [426, "julien.henry@sonarsource.com", "2014-05-01"],
+ [427, "simon.brandhof@gmail.com", "2013-05-29"],
+ [428, "julien.henry@sonarsource.com", "2014-05-01"],
+ [429, "simon.brandhof@gmail.com", "2013-05-29"],
+ [433, "simon.brandhof@gmail.com", "2014-02-24"],
+ [434, "simon.brandhof@gmail.com", "2013-05-29"],
+ [437, "simon.brandhof@gmail.com", "2013-04-17"],
+ [440, "julien.henry@sonarsource.com", "2014-05-01"],
+ [442, "simon.brandhof@gmail.com", "2013-04-17"],
+ [452, "julien.henry@sonarsource.com", "2014-05-01"],
+ [453, "simon.brandhof@gmail.com", "2013-04-17"],
+ [454, "julien.henry@sonarsource.com", "2014-05-01"],
+ [455, "simon.brandhof@gmail.com", "2013-04-17"],
+ [456, "julien.henry@sonarsource.com", "2014-05-01"],
+ [457, "simon.brandhof@gmail.com", "2013-04-17"],
+ [462, "julien.henry@sonarsource.com", "2014-05-01"],
+ [463, "simon.brandhof@gmail.com", "2013-04-17"],
+ [468, "julien.henry@sonarsource.com", "2014-05-01"],
+ [469, "simon.brandhof@gmail.com", "2013-04-17"],
+ [470, "julien.henry@sonarsource.com", "2014-05-01"],
+ [475, "simon.brandhof@gmail.com", "2013-04-17"],
+ [476, "julien.henry@sonarsource.com", "2014-05-01"],
+ [478, "simon.brandhof@gmail.com", "2013-04-17"],
+ [479, "simon.brandhof@gmail.com", "2014-02-20"],
+ [483, "julien.henry@sonarsource.com", "2014-05-01"],
+ [486, "simon.brandhof@gmail.com", "2013-04-17"],
+ [490, "simon.brandhof@gmail.com", "2014-02-24"],
+ [491, "simon.brandhof@gmail.com", "2013-04-17"],
+ [494, "simon.brandhof@gmail.com", "2014-02-20"],
+ [497, "simon.brandhof@gmail.com", "2013-04-17"],
+ [498, "simon.brandhof@gmail.com", "2014-02-20"],
+ [499, "simon.brandhof@gmail.com", "2013-04-17"],
+ [503, "simon.brandhof@gmail.com", "2014-02-20"],
+ [504, "simon.brandhof@gmail.com", "2013-04-17"],
+ [508, "simon.brandhof@gmail.com", "2014-02-20"],
+ [509, "simon.brandhof@gmail.com", "2013-04-17"],
+ [517, "julien.henry@sonarsource.com", "2014-05-06"],
+ [518, "simon.brandhof@gmail.com", "2013-04-16"]
+]}
--- /dev/null
+{"sources": [
+ [1, "<span class=\"cppd\">/*</span>"],
+ [2, "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>"],
+ [3, "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>"],
+ [4, "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>"],
+ [5, "<span class=\"cppd\"> *</span>"],
+ [6, "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>"],
+ [7, "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>"],
+ [8, "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>"],
+ [9, "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>"],
+ [10, "<span class=\"cppd\"> *</span>"],
+ [11, "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>"],
+ [12, "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>"],
+ [13, "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span>"],
+ [14, "<span class=\"cppd\"> * Lesser General Public License for more details.</span>"],
+ [15, "<span class=\"cppd\"> *</span>"],
+ [16, "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>"],
+ [17, "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>"],
+ [18, "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span>"],
+ [19, "<span class=\"cppd\"> */</span>"],
+ [20, "<span class=\"k\">package </span>org.sonar.batch.index;"],
+ [21, ""],
+ [22, "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-949 sym\">Sets</span>;"],
+ [23, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-976 sym\">Exchange</span>;"],
+ [24, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1007 sym\">Key</span>;"],
+ [25, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1033 sym\">KeyFilter</span>;"],
+ [26, "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-1075 sym\">PersistitException</span>;"],
+ [27, "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-1134 sym\">ToStringBuilder</span>;"],
+ [28, ""],
+ [29, "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-1176 sym\">CheckForNull</span>;"],
+ [30, ""],
+ [31, "<span class=\"k\">import </span>java.io.<span class=\"sym-1206 sym\">Serializable</span>;"],
+ [32, "<span class=\"k\">import </span>java.util.<span class=\"sym-1237 sym\">Iterator</span>;"],
+ [33, "<span class=\"k\">import </span>java.util.<span class=\"sym-1264 sym\">NoSuchElementException</span>;"],
+ [34, "<span class=\"k\">import </span>java.util.<span class=\"sym-1305 sym\">Set</span>;"],
+ [35, ""],
+ [36, "<span class=\"cppd\">/**</span>"],
+ [37, "<span class=\"cppd\"> * <p></span>"],
+ [38, "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>"],
+ [39, "<span class=\"cppd\"> * </p></span>"],
+ [40, "<span class=\"cppd\"> */</span>"],
+ [41, "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1435 sym\">Cache</span><V <span class=\"k\">extends </span>Serializable> {"],
+ [42, ""],
+ [43, " <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-1491 sym\">name</span>;"],
+ [44, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1522 sym\">exchange</span>;"],
+ [45, ""],
+ [46, " <span class=\"sym-1535 sym\">Cache</span>(String <span class=\"sym-1548 sym\">name</span>, <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1563 sym\">exchange</span>) {"],
+ [47, " <span class=\"k\">this</span>.<span class=\"sym-1491 sym\">name</span> = <span class=\"sym-1548 sym\">name</span>;"],
+ [48, " <span class=\"k\">this</span>.<span class=\"sym-1522 sym\">exchange</span> = <span class=\"sym-1563 sym\">exchange</span>;"],
+ [49, " }"],
+ [50, ""],
+ [51, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-1650 sym\">put</span>(Object <span class=\"sym-1661 sym\">key</span>, V <span class=\"sym-1668 sym\">value</span>) {"],
+ [52, " resetKey(<span class=\"sym-1661 sym\">key</span>);"],
+ [53, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1668 sym\">value</span>);"],
+ [54, " }"],
+ [55, ""],
+ [56, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-1744 sym\">put</span>(Object <span class=\"sym-1755 sym\">firstKey</span>, Object <span class=\"sym-1772 sym\">secondKey</span>, V <span class=\"sym-1785 sym\">value</span>) {"],
+ [57, " resetKey(<span class=\"sym-1755 sym\">firstKey</span>, <span class=\"sym-1772 sym\">secondKey</span>);"],
+ [58, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1785 sym\">value</span>);"],
+ [59, " }"],
+ [60, ""],
+ [61, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-1877 sym\">put</span>(Object <span class=\"sym-1888 sym\">firstKey</span>, Object <span class=\"sym-1905 sym\">secondKey</span>, Object <span class=\"sym-1923 sym\">thirdKey</span>, V <span class=\"sym-1935 sym\">value</span>) {"],
+ [62, " resetKey(<span class=\"sym-1888 sym\">firstKey</span>, <span class=\"sym-1905 sym\">secondKey</span>, <span class=\"sym-1923 sym\">thirdKey</span>);"],
+ [63, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1935 sym\">value</span>);"],
+ [64, " }"],
+ [65, ""],
+ [66, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-2037 sym\">put</span>(Object[] <span class=\"sym-2050 sym\">key</span>, V <span class=\"sym-2057 sym\">value</span>) {"],
+ [67, " resetKey(<span class=\"sym-2050 sym\">key</span>);"],
+ [68, " <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-2057 sym\">value</span>);"],
+ [69, " }"],
+ [70, ""],
+ [71, " <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-2134 sym\">doPut</span>(V <span class=\"sym-2142 sym\">value</span>) {"],
+ [72, " <span class=\"k\">try </span>{"],
+ [73, " <span class=\"sym-1522 sym\">exchange</span>.getValue().put(<span class=\"sym-2142 sym\">value</span>);"],
+ [74, " <span class=\"sym-1522 sym\">exchange</span>.store();"],
+ [75, " <span class=\"k\">return </span><span class=\"k\">this</span>;"],
+ [76, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-2265 sym\">e</span>) {"],
+ [77, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-2265 sym\">e</span>);"],
+ [78, " }"],
+ [79, " }"],
+ [80, ""],
+ [81, " <span class=\"cppd\">/**</span>"],
+ [82, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
+ [83, "<span class=\"cppd\"> */</span>"],
+ [84, " <span class=\"k\">public </span>V <span class=\"sym-2464 sym\">get</span>(Object <span class=\"sym-2475 sym\">key</span>) {"],
+ [85, " resetKey(<span class=\"sym-2475 sym\">key</span>);"],
+ [86, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+ [87, " }"],
+ [88, ""],
+ [89, " <span class=\"cppd\">/**</span>"],
+ [90, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
+ [91, "<span class=\"cppd\"> */</span>"],
+ [92, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+ [93, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-2639 sym\">get</span>(Object <span class=\"sym-2650 sym\">firstKey</span>, Object <span class=\"sym-2667 sym\">secondKey</span>) {"],
+ [94, " resetKey(<span class=\"sym-2650 sym\">firstKey</span>, <span class=\"sym-2667 sym\">secondKey</span>);"],
+ [95, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+ [96, " }"],
+ [97, ""],
+ [98, " <span class=\"cppd\">/**</span>"],
+ [99, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
+ [100, "<span class=\"cppd\"> */</span>"],
+ [101, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+ [102, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-2853 sym\">get</span>(Object <span class=\"sym-2864 sym\">firstKey</span>, Object <span class=\"sym-2881 sym\">secondKey</span>, Object <span class=\"sym-2899 sym\">thirdKey</span>) {"],
+ [103, " resetKey(<span class=\"sym-2864 sym\">firstKey</span>, <span class=\"sym-2881 sym\">secondKey</span>, <span class=\"sym-2899 sym\">thirdKey</span>);"],
+ [104, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+ [105, " }"],
+ [106, ""],
+ [107, " <span class=\"cppd\">/**</span>"],
+ [108, "<span class=\"cppd\"> * Returns the value object associated with keys, or null if not found.</span>"],
+ [109, "<span class=\"cppd\"> */</span>"],
+ [110, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+ [111, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-3094 sym\">get</span>(Object[] <span class=\"sym-3107 sym\">key</span>) {"],
+ [112, " resetKey(<span class=\"sym-3107 sym\">key</span>);"],
+ [113, " <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+ [114, " }"],
+ [115, ""],
+ [116, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
+ [117, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+ [118, "<span class=\"a\"> </span><span class=\"k\">private </span>V <span class=\"sym-3219 sym\">doGet</span>() {"],
+ [119, " <span class=\"k\">try </span>{"],
+ [120, " <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
+ [121, " <span class=\"k\">if </span>(!<span class=\"sym-1522 sym\">exchange</span>.getValue().isDefined()) {"],
+ [122, " <span class=\"k\">return </span><span class=\"k\">null</span>;"],
+ [123, " }"],
+ [124, " <span class=\"k\">return </span>(V) <span class=\"sym-1522 sym\">exchange</span>.getValue().get();"],
+ [125, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-3405 sym\">e</span>) {"],
+ [126, " <span class=\"cppd\">// TODO add parameters to message</span>"],
+ [127, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-3405 sym\">e</span>);"],
+ [128, " }"],
+ [129, " }"],
+ [130, ""],
+ [131, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3562 sym\">containsKey</span>(Object <span class=\"sym-3581 sym\">key</span>) {"],
+ [132, " resetKey(<span class=\"sym-3581 sym\">key</span>);"],
+ [133, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+ [134, " }"],
+ [135, ""],
+ [136, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3657 sym\">containsKey</span>(Object <span class=\"sym-3676 sym\">firstKey</span>, Object <span class=\"sym-3693 sym\">secondKey</span>) {"],
+ [137, " resetKey(<span class=\"sym-3676 sym\">firstKey</span>, <span class=\"sym-3693 sym\">secondKey</span>);"],
+ [138, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+ [139, " }"],
+ [140, ""],
+ [141, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3791 sym\">containsKey</span>(Object <span class=\"sym-3810 sym\">firstKey</span>, Object <span class=\"sym-3827 sym\">secondKey</span>, Object <span class=\"sym-3845 sym\">thirdKey</span>) {"],
+ [142, " resetKey(<span class=\"sym-3810 sym\">firstKey</span>, <span class=\"sym-3827 sym\">secondKey</span>, <span class=\"sym-3845 sym\">thirdKey</span>);"],
+ [143, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+ [144, " }"],
+ [145, ""],
+ [146, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3952 sym\">containsKey</span>(Object[] <span class=\"sym-3973 sym\">key</span>) {"],
+ [147, " resetKey(<span class=\"sym-3973 sym\">key</span>);"],
+ [148, " <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+ [149, " }"],
+ [150, ""],
+ [151, " <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4050 sym\">doContainsKey</span>() {"],
+ [152, " <span class=\"k\">try </span>{"],
+ [153, " <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
+ [154, " <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.isValueDefined();"],
+ [155, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-4165 sym\">e</span>) {"],
+ [156, " <span class=\"cppd\">// TODO add parameters to message</span>"],
+ [157, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4165 sym\">e</span>);"],
+ [158, " }"],
+ [159, " }"],
+ [160, ""],
+ [161, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4328 sym\">remove</span>(Object <span class=\"sym-4342 sym\">key</span>) {"],
+ [162, " resetKey(<span class=\"sym-4342 sym\">key</span>);"],
+ [163, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+ [164, " }"],
+ [165, ""],
+ [166, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4413 sym\">remove</span>(Object <span class=\"sym-4427 sym\">firstKey</span>, Object <span class=\"sym-4444 sym\">secondKey</span>) {"],
+ [167, " resetKey(<span class=\"sym-4427 sym\">firstKey</span>, <span class=\"sym-4444 sym\">secondKey</span>);"],
+ [168, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+ [169, " }"],
+ [170, ""],
+ [171, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4537 sym\">remove</span>(Object <span class=\"sym-4551 sym\">firstKey</span>, Object <span class=\"sym-4568 sym\">secondKey</span>, Object <span class=\"sym-4586 sym\">thirdKey</span>) {"],
+ [172, " resetKey(<span class=\"sym-4551 sym\">firstKey</span>, <span class=\"sym-4568 sym\">secondKey</span>, <span class=\"sym-4586 sym\">thirdKey</span>);"],
+ [173, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+ [174, " }"],
+ [175, ""],
+ [176, " <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4688 sym\">remove</span>(Object[] <span class=\"sym-4704 sym\">key</span>) {"],
+ [177, " resetKey(<span class=\"sym-4704 sym\">key</span>);"],
+ [178, " <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+ [179, " }"],
+ [180, ""],
+ [181, " <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4776 sym\">doRemove</span>() {"],
+ [182, " <span class=\"k\">try </span>{"],
+ [183, " <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.remove();"],
+ [184, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-4854 sym\">e</span>) {"],
+ [185, " <span class=\"cppd\">// TODO add parameters to message</span>"],
+ [186, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4854 sym\">e</span>);"],
+ [187, " }"],
+ [188, " }"],
+ [189, ""],
+ [190, " <span class=\"cppd\">/**</span>"],
+ [191, "<span class=\"cppd\"> * Removes everything in the specified group.</span>"],
+ [192, "<span class=\"cppd\"> *</span>"],
+ [193, "<span class=\"cppd\"> * @param group The group name.</span>"],
+ [194, "<span class=\"cppd\"> */</span>"],
+ [195, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5111 sym\">clear</span>(Object <span class=\"sym-5124 sym\">key</span>) {"],
+ [196, " resetKey(<span class=\"sym-5124 sym\">key</span>);"],
+ [197, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+ [198, " }"],
+ [199, ""],
+ [200, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5195 sym\">clear</span>(Object <span class=\"sym-5208 sym\">firstKey</span>, Object <span class=\"sym-5225 sym\">secondKey</span>) {"],
+ [201, " resetKey(<span class=\"sym-5208 sym\">firstKey</span>, <span class=\"sym-5225 sym\">secondKey</span>);"],
+ [202, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+ [203, " }"],
+ [204, ""],
+ [205, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5318 sym\">clear</span>(Object <span class=\"sym-5331 sym\">firstKey</span>, Object <span class=\"sym-5348 sym\">secondKey</span>, Object <span class=\"sym-5366 sym\">thirdKey</span>) {"],
+ [206, " resetKey(<span class=\"sym-5331 sym\">firstKey</span>, <span class=\"sym-5348 sym\">secondKey</span>, <span class=\"sym-5366 sym\">thirdKey</span>);"],
+ [207, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+ [208, " }"],
+ [209, ""],
+ [210, " <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5468 sym\">clear</span>(Object[] <span class=\"sym-5483 sym\">key</span>) {"],
+ [211, " resetKey(<span class=\"sym-5483 sym\">key</span>);"],
+ [212, " <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+ [213, " }"],
+ [214, ""],
+ [215, " <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span><V> <span class=\"sym-5555 sym\">doClear</span>() {"],
+ [216, " <span class=\"k\">try </span>{"],
+ [217, " <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-5587 sym\">to</span> = <span class=\"k\">new </span><span class=\"sym-1007 sym\">Key</span>(<span class=\"sym-1522 sym\">exchange</span>.getKey());"],
+ [218, " <span class=\"sym-5587 sym\">to</span>.append(<span class=\"sym-1007 sym\">Key</span>.AFTER);"],
+ [219, " <span class=\"sym-1522 sym\">exchange</span>.removeKeyRange(<span class=\"sym-1522 sym\">exchange</span>.getKey(), <span class=\"sym-5587 sym\">to</span>);"],
+ [220, " <span class=\"k\">return </span><span class=\"k\">this</span>;"],
+ [221, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-5744 sym\">e</span>) {"],
+ [222, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-5744 sym\">e</span>);"],
+ [223, " }"],
+ [224, " }"],
+ [225, ""],
+ [226, " <span class=\"cppd\">/**</span>"],
+ [227, "<span class=\"cppd\"> * Clears the default as well as all group caches.</span>"],
+ [228, "<span class=\"cppd\"> */</span>"],
+ [229, " <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-5924 sym\">clear</span>() {"],
+ [230, " <span class=\"k\">try </span>{"],
+ [231, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [232, " <span class=\"sym-1522 sym\">exchange</span>.removeAll();"],
+ [233, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-6019 sym\">e</span>) {"],
+ [234, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-6019 sym\">e</span>);"],
+ [235, " }"],
+ [236, " }"],
+ [237, ""],
+ [238, " <span class=\"cppd\">/**</span>"],
+ [239, "<span class=\"cppd\"> * Returns the set of cache keys associated with this group.</span>"],
+ [240, "<span class=\"cppd\"> * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>"],
+ [241, "<span class=\"cppd\"> *</span>"],
+ [242, "<span class=\"cppd\"> * @param group The group.</span>"],
+ [243, "<span class=\"cppd\"> * @return The set of cache keys for this group.</span>"],
+ [244, "<span class=\"cppd\"> */</span>"],
+ [245, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
+ [246, " <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6374 sym\">keySet</span>(Object <span class=\"sym-6388 sym\">key</span>) {"],
+ [247, " <span class=\"k\">try </span>{"],
+ [248, " <span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-6423 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
+ [249, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [250, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-6494 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+ [251, " <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-6388 sym\">key</span>);"],
+ [252, " <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [253, " <span class=\"k\">while </span>(<span class=\"sym-6494 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
+ [254, " <span class=\"sym-6423 sym\">keys</span>.add(<span class=\"sym-6494 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
+ [255, " }"],
+ [256, " <span class=\"k\">return </span><span class=\"sym-6423 sym\">keys</span>;"],
+ [257, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-6777 sym\">e</span>) {"],
+ [258, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-6777 sym\">e</span>);"],
+ [259, " }"],
+ [260, " }"],
+ [261, ""],
+ [262, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
+ [263, " <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6919 sym\">keySet</span>(Object <span class=\"sym-6933 sym\">firstKey</span>, Object <span class=\"sym-6950 sym\">secondKey</span>) {"],
+ [264, " <span class=\"k\">try </span>{"],
+ [265, " <span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-6991 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
+ [266, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [267, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7062 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+ [268, " <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6933 sym\">firstKey</span>);"],
+ [269, " <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6950 sym\">secondKey</span>);"],
+ [270, " <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [271, " <span class=\"k\">while </span>(<span class=\"sym-7062 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
+ [272, " <span class=\"sym-6991 sym\">keys</span>.add(<span class=\"sym-7062 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
+ [273, " }"],
+ [274, " <span class=\"k\">return </span><span class=\"sym-6991 sym\">keys</span>;"],
+ [275, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-7392 sym\">e</span>) {"],
+ [276, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7392 sym\">e</span>);"],
+ [277, " }"],
+ [278, " }"],
+ [279, ""],
+ [280, " <span class=\"cppd\">/**</span>"],
+ [281, "<span class=\"cppd\"> * Returns the set of keys associated with this cache.</span>"],
+ [282, "<span class=\"cppd\"> *</span>"],
+ [283, "<span class=\"cppd\"> * @return The set containing the keys for this cache.</span>"],
+ [284, "<span class=\"cppd\"> */</span>"],
+ [285, " <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-7641 sym\">keySet</span>() {"],
+ [286, " <span class=\"k\">try </span>{"],
+ [287, " <span class=\"sym-1305 sym\">Set</span><Object> <span class=\"sym-7680 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
+ [288, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [289, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7751 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+ [290, " <span class=\"sym-7751 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [291, " <span class=\"k\">while </span>(<span class=\"sym-7751 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
+ [292, " <span class=\"sym-7680 sym\">keys</span>.add(<span class=\"sym-7751 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
+ [293, " }"],
+ [294, " <span class=\"k\">return </span><span class=\"sym-7680 sym\">keys</span>;"],
+ [295, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-7998 sym\">e</span>) {"],
+ [296, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7998 sym\">e</span>);"],
+ [297, " }"],
+ [298, " }"],
+ [299, ""],
+ [300, " <span class=\"cppd\">/**</span>"],
+ [301, "<span class=\"cppd\"> * Lazy-loading values for given keys</span>"],
+ [302, "<span class=\"cppd\"> */</span>"],
+ [303, " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-8168 sym\">values</span>(Object <span class=\"sym-8182 sym\">firstKey</span>, Object <span class=\"sym-8199 sym\">secondKey</span>) {"],
+ [304, " <span class=\"k\">try </span>{"],
+ [305, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [306, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8182 sym\">firstKey</span>).append(<span class=\"sym-8199 sym\">secondKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [307, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8331 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+ [308, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-8390 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8182 sym\">firstKey</span>)).append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8199 sym\">secondKey</span>));"],
+ [309, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span><V>(<span class=\"sym-8331 sym\">iteratorExchange</span>, <span class=\"sym-8390 sym\">filter</span>);"],
+ [310, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-8579 sym\">e</span>) {"],
+ [311, " <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-8579 sym\">e</span>);"],
+ [312, " }"],
+ [313, " }"],
+ [314, ""],
+ [315, " <span class=\"k\">private </span>IllegalStateException <span class=\"sym-8659 sym\">failToGetValues</span>(Exception <span class=\"sym-8685 sym\">e</span>) {"],
+ [316, " <span class=\"k\">return </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-8685 sym\">e</span>);"],
+ [317, " }"],
+ [318, ""],
+ [319, " <span class=\"cppd\">/**</span>"],
+ [320, "<span class=\"cppd\"> * Lazy-loading values for a given key</span>"],
+ [321, "<span class=\"cppd\"> */</span>"],
+ [322, " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-8851 sym\">values</span>(Object <span class=\"sym-8865 sym\">firstKey</span>) {"],
+ [323, " <span class=\"k\">try </span>{"],
+ [324, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [325, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8865 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [326, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8978 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+ [327, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9037 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8865 sym\">firstKey</span>));"],
+ [328, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span><V>(<span class=\"sym-8978 sym\">iteratorExchange</span>, <span class=\"sym-9037 sym\">filter</span>);"],
+ [329, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-9186 sym\">e</span>) {"],
+ [330, " <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9186 sym\">e</span>);"],
+ [331, " }"],
+ [332, " }"],
+ [333, ""],
+ [334, " <span class=\"cppd\">/**</span>"],
+ [335, "<span class=\"cppd\"> * Lazy-loading values</span>"],
+ [336, "<span class=\"cppd\"> */</span>"],
+ [337, " <span class=\"k\">public </span>Iterable<V> <span class=\"sym-9292 sym\">values</span>() {"],
+ [338, " <span class=\"k\">try </span>{"],
+ [339, " <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [340, " <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-9371 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+ [341, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9430 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
+ [342, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span><V>(<span class=\"sym-9371 sym\">iteratorExchange</span>, <span class=\"sym-9430 sym\">filter</span>);"],
+ [343, " } <span class=\"k\">catch </span>(Exception <span class=\"sym-9562 sym\">e</span>) {"],
+ [344, " <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9562 sym\">e</span>);"],
+ [345, " }"],
+ [346, " }"],
+ [347, ""],
+ [348, " <span class=\"k\">public </span>Iterable<<span class=\"sym-13607 sym\">Entry</span><V>> <span class=\"sym-9638 sym\">entries</span>() {"],
+ [349, " <span class=\"sym-1522 sym\">exchange</span>.clear().to(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [350, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9701 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
+ [351, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span><V>(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9701 sym\">filter</span>);"],
+ [352, " }"],
+ [353, ""],
+ [354, " <span class=\"k\">public </span>Iterable<<span class=\"sym-13607 sym\">Entry</span><V>> <span class=\"sym-9847 sym\">entries</span>(Object <span class=\"sym-9862 sym\">firstKey</span>) {"],
+ [355, " <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-9862 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+ [356, " <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9946 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-9862 sym\">firstKey</span>));"],
+ [357, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span><V>(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9946 sym\">filter</span>);"],
+ [358, " }"],
+ [359, ""],
+ [360, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10096 sym\">resetKey</span>(Object <span class=\"sym-10112 sym\">key</span>) {"],
+ [361, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [362, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10112 sym\">key</span>);"],
+ [363, " }"],
+ [364, ""],
+ [365, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10187 sym\">resetKey</span>(Object <span class=\"sym-10203 sym\">first</span>, Object <span class=\"sym-10217 sym\">second</span>) {"],
+ [366, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [367, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10203 sym\">first</span>).append(<span class=\"sym-10217 sym\">second</span>);"],
+ [368, " }"],
+ [369, ""],
+ [370, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10312 sym\">resetKey</span>(Object <span class=\"sym-10328 sym\">first</span>, Object <span class=\"sym-10342 sym\">second</span>, Object <span class=\"sym-10357 sym\">third</span>) {"],
+ [371, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [372, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10328 sym\">first</span>).append(<span class=\"sym-10342 sym\">second</span>).append(<span class=\"sym-10357 sym\">third</span>);"],
+ [373, " }"],
+ [374, ""],
+ [375, " <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10465 sym\">resetKey</span>(Object[] <span class=\"sym-10483 sym\">keys</span>) {"],
+ [376, " <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+ [377, " <span class=\"k\">for </span>(Object <span class=\"sym-10529 sym\">o</span> : <span class=\"sym-10483 sym\">keys</span>) {"],
+ [378, " <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10529 sym\">o</span>);"],
+ [379, " }"],
+ [380, " }"],
+ [381, ""],
+ [382, " <span class=\"cppd\">//</span>"],
+ [383, " <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>"],
+ [384, " <span class=\"cppd\">//</span>"],
+ [385, ""],
+ [386, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10646 sym\">ValueIterable</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span>Iterable<T> {"],
+ [387, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1237 sym\">Iterator</span><T> <span class=\"sym-10739 sym\">iterator</span>;"],
+ [388, ""],
+ [389, " <span class=\"k\">private </span><span class=\"sym-10762 sym\">ValueIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-10805 sym\">keyFilter</span>) {"],
+ [390, " <span class=\"k\">this</span>.<span class=\"sym-10739 sym\">iterator</span> = <span class=\"k\">new </span><span class=\"sym-10997 sym\">ValueIterator</span><T>(<span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-10805 sym\">keyFilter</span>);"],
+ [391, " }"],
+ [392, ""],
+ [393, " <span class=\"a\">@Override</span>"],
+ [394, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span><T> <span class=\"sym-10927 sym\">iterator</span>() {"],
+ [395, " <span class=\"k\">return </span><span class=\"sym-10739 sym\">iterator</span>;"],
+ [396, " }"],
+ [397, " }"],
+ [398, ""],
+ [399, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10997 sym\">ValueIterator</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span><T> {"],
+ [400, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11087 sym\">exchange</span>;"],
+ [401, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11125 sym\">keyFilter</span>;"],
+ [402, ""],
+ [403, " <span class=\"k\">private </span><span class=\"sym-11149 sym\">ValueIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11172 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11192 sym\">keyFilter</span>) {"],
+ [404, " <span class=\"k\">this</span>.<span class=\"sym-11087 sym\">exchange</span> = <span class=\"sym-11172 sym\">exchange</span>;"],
+ [405, " <span class=\"k\">this</span>.<span class=\"sym-11125 sym\">keyFilter</span> = <span class=\"sym-11192 sym\">keyFilter</span>;"],
+ [406, " }"],
+ [407, ""],
+ [408, " <span class=\"a\">@Override</span>"],
+ [409, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-11311 sym\">hasNext</span>() {"],
+ [410, " <span class=\"k\">try </span>{"],
+ [411, " <span class=\"k\">return </span><span class=\"sym-11087 sym\">exchange</span>.hasNext(<span class=\"sym-11125 sym\">keyFilter</span>);"],
+ [412, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11413 sym\">e</span>) {"],
+ [413, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11413 sym\">e</span>);"],
+ [414, " }"],
+ [415, " }"],
+ [416, ""],
+ [417, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
+ [418, " <span class=\"a\">@Override</span>"],
+ [419, "<span class=\"a\"> </span><span class=\"k\">public </span>T <span class=\"sym-11539 sym\">next</span>() {"],
+ [420, " <span class=\"k\">try </span>{"],
+ [421, " <span class=\"sym-11087 sym\">exchange</span>.next(<span class=\"sym-11125 sym\">keyFilter</span>);"],
+ [422, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11628 sym\">e</span>) {"],
+ [423, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11628 sym\">e</span>);"],
+ [424, " }"],
+ [425, " <span class=\"k\">if </span>(<span class=\"sym-11087 sym\">exchange</span>.getValue().isDefined()) {"],
+ [426, " <span class=\"k\">return </span>(T) <span class=\"sym-11087 sym\">exchange</span>.getValue().get();"],
+ [427, " }"],
+ [428, " <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
+ [429, " }"],
+ [430, ""],
+ [431, " <span class=\"a\">@Override</span>"],
+ [432, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-11863 sym\">remove</span>() {"],
+ [433, " <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
+ [434, " }"],
+ [435, " }"],
+ [436, ""],
+ [437, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-11992 sym\">EntryIterable</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span>Iterable<<span class=\"sym-13607 sym\">Entry</span><T>> {"],
+ [438, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-12339 sym\">EntryIterator</span><T> <span class=\"sym-12097 sym\">it</span>;"],
+ [439, ""],
+ [440, " <span class=\"k\">private </span><span class=\"sym-12114 sym\">EntryIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12157 sym\">keyFilter</span>) {"],
+ [441, " <span class=\"sym-12097 sym\">it</span> = <span class=\"k\">new </span><span class=\"sym-12339 sym\">EntryIterator</span><T>(<span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-12157 sym\">keyFilter</span>);"],
+ [442, " }"],
+ [443, ""],
+ [444, " <span class=\"a\">@Override</span>"],
+ [445, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span><<span class=\"sym-13607 sym\">Entry</span><T>> <span class=\"sym-12275 sym\">iterator</span>() {"],
+ [446, " <span class=\"k\">return </span><span class=\"sym-12097 sym\">it</span>;"],
+ [447, " }"],
+ [448, " }"],
+ [449, ""],
+ [450, " <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-12339 sym\">EntryIterator</span><T <span class=\"k\">extends </span>Serializable> <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span><<span class=\"sym-13607 sym\">Entry</span><T>> {"],
+ [451, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12436 sym\">exchange</span>;"],
+ [452, " <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12474 sym\">keyFilter</span>;"],
+ [453, ""],
+ [454, " <span class=\"k\">private </span><span class=\"sym-12498 sym\">EntryIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12521 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12541 sym\">keyFilter</span>) {"],
+ [455, " <span class=\"k\">this</span>.<span class=\"sym-12436 sym\">exchange</span> = <span class=\"sym-12521 sym\">exchange</span>;"],
+ [456, " <span class=\"k\">this</span>.<span class=\"sym-12474 sym\">keyFilter</span> = <span class=\"sym-12541 sym\">keyFilter</span>;"],
+ [457, " }"],
+ [458, ""],
+ [459, " <span class=\"a\">@Override</span>"],
+ [460, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-12660 sym\">hasNext</span>() {"],
+ [461, " <span class=\"k\">try </span>{"],
+ [462, " <span class=\"k\">return </span><span class=\"sym-12436 sym\">exchange</span>.hasNext(<span class=\"sym-12474 sym\">keyFilter</span>);"],
+ [463, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12762 sym\">e</span>) {"],
+ [464, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12762 sym\">e</span>);"],
+ [465, " }"],
+ [466, " }"],
+ [467, ""],
+ [468, " <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
+ [469, " <span class=\"a\">@Override</span>"],
+ [470, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"sym-13607 sym\">Entry</span><T> <span class=\"sym-12895 sym\">next</span>() {"],
+ [471, " <span class=\"k\">try </span>{"],
+ [472, " <span class=\"sym-12436 sym\">exchange</span>.next(<span class=\"sym-12474 sym\">keyFilter</span>);"],
+ [473, " } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12984 sym\">e</span>) {"],
+ [474, " <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12984 sym\">e</span>);"],
+ [475, " }"],
+ [476, " <span class=\"k\">if </span>(<span class=\"sym-12436 sym\">exchange</span>.getValue().isDefined()) {"],
+ [477, " T <span class=\"sym-13096 sym\">value</span> = (T) <span class=\"sym-12436 sym\">exchange</span>.getValue().get();"],
+ [478, " <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-13147 sym\">key</span> = <span class=\"sym-12436 sym\">exchange</span>.getKey();"],
+ [479, " Object[] <span class=\"sym-13189 sym\">array</span> = <span class=\"k\">new </span>Object[<span class=\"sym-13147 sym\">key</span>.getDepth()];"],
+ [480, " <span class=\"k\">for </span>(<span class=\"k\">int </span><span class=\"sym-13242 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-13242 sym\">i</span> < <span class=\"sym-13147 sym\">key</span>.getDepth(); <span class=\"sym-13242 sym\">i</span>++) {"],
+ [481, " <span class=\"sym-13189 sym\">array</span>[<span class=\"sym-13242 sym\">i</span>] = <span class=\"sym-13147 sym\">key</span>.indexTo(<span class=\"sym-13242 sym\">i</span> - <span class=\"sym-13147 sym\">key</span>.getDepth()).decode();"],
+ [482, " }"],
+ [483, " <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-13607 sym\">Entry</span><T>(<span class=\"sym-13189 sym\">array</span>, <span class=\"sym-13096 sym\">value</span>);"],
+ [484, " }"],
+ [485, " <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
+ [486, " }"],
+ [487, ""],
+ [488, " <span class=\"a\">@Override</span>"],
+ [489, "<span class=\"a\"> </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-13479 sym\">remove</span>() {"],
+ [490, " <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
+ [491, " }"],
+ [492, " }"],
+ [493, ""],
+ [494, " <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-13607 sym\">Entry</span><V <span class=\"k\">extends </span>Serializable> {"],
+ [495, " <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-13666 sym\">key</span>;"],
+ [496, " <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-13691 sym\">value</span>;"],
+ [497, ""],
+ [498, " <span class=\"sym-13703 sym\">Entry</span>(Object[] <span class=\"sym-13718 sym\">key</span>, V <span class=\"sym-13725 sym\">value</span>) {"],
+ [499, " <span class=\"k\">this</span>.<span class=\"sym-13666 sym\">key</span> = <span class=\"sym-13718 sym\">key</span>;"],
+ [500, " <span class=\"k\">this</span>.<span class=\"sym-13691 sym\">value</span> = <span class=\"sym-13725 sym\">value</span>;"],
+ [501, " }"],
+ [502, ""],
+ [503, " <span class=\"k\">public </span>Object[] <span class=\"sym-13809 sym\">key</span>() {"],
+ [504, " <span class=\"k\">return </span><span class=\"sym-13666 sym\">key</span>;"],
+ [505, " }"],
+ [506, ""],
+ [507, " <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+ [508, "<span class=\"a\"> </span><span class=\"k\">public </span>V <span class=\"sym-13873 sym\">value</span>() {"],
+ [509, " <span class=\"k\">return </span><span class=\"sym-13691 sym\">value</span>;"],
+ [510, " }"],
+ [511, ""],
+ [512, " <span class=\"a\">@Override</span>"],
+ [513, "<span class=\"a\"> </span><span class=\"k\">public </span>String <span class=\"sym-13942 sym\">toString</span>() {"],
+ [514, " <span class=\"k\">return </span><span class=\"sym-1134 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);"],
+ [515, " }"],
+ [516, " }"],
+ [517, ""],
+ [518, "}"],
+ [519, ""]
+]}
--- /dev/null
+{"tests": [
+ {
+ "name": "should_update_existing_issue",
+ "status": "OK",
+ "durationInMs": 293,
+ "_ref": "1"
+ },
+ {
+ "name": "testDistributionMeasure",
+ "status": "OK",
+ "durationInMs": 148,
+ "_ref": "2"
+ },
+ {
+ "name": "one_part_key",
+ "status": "OK",
+ "durationInMs": 96,
+ "_ref": "3"
+ },
+ {
+ "name": "testIssueExclusion",
+ "status": "OK",
+ "durationInMs": 305,
+ "_ref": "4"
+ },
+ {
+ "name": "should_add_measure_with_same_metric",
+ "status": "OK",
+ "durationInMs": 141,
+ "_ref": "5"
+ },
+ {
+ "name": "should_create_cache",
+ "status": "OK",
+ "durationInMs": 81,
+ "_ref": "6"
+ },
+ {
+ "name": "scanProjectWithMixedSourcesAndTests",
+ "status": "OK",
+ "durationInMs": 239,
+ "_ref": "7"
+ },
+ {
+ "name": "remove_versus_clear",
+ "status": "OK",
+ "durationInMs": 111,
+ "_ref": "3"
+ },
+ {
+ "name": "should_persist_component_data",
+ "status": "OK",
+ "durationInMs": 132,
+ "_ref": "8"
+ },
+ {
+ "name": "scanProjectWithSourceDir",
+ "status": "OK",
+ "durationInMs": 212,
+ "_ref": "7"
+ },
+ {
+ "name": "should_add_measure_with_too_big_data_for_persistit",
+ "status": "OK",
+ "durationInMs": 336,
+ "_ref": "5"
+ },
+ {
+ "name": "failForDuplicateInputFile",
+ "status": "OK",
+ "durationInMs": 127,
+ "_ref": "7"
+ },
+ {
+ "name": "should_not_create_cache_twice",
+ "status": "OK",
+ "durationInMs": 101,
+ "_ref": "6"
+ },
+ {
+ "name": "should_get_and_set_data",
+ "status": "OK",
+ "durationInMs": 190,
+ "_ref": "9"
+ },
+ {
+ "name": "should_add_input_file",
+ "status": "OK",
+ "durationInMs": 122,
+ "_ref": "10"
+ },
+ {
+ "name": "scanTempProject",
+ "status": "OK",
+ "durationInMs": 345,
+ "_ref": "4"
+ },
+ {
+ "name": "should_get_measures",
+ "status": "OK",
+ "durationInMs": 114,
+ "_ref": "5"
+ },
+ {
+ "name": "test_key_being_prefix_of_another_key",
+ "status": "OK",
+ "durationInMs": 94,
+ "_ref": "3"
+ },
+ {
+ "name": "should_add_measure_with_big_data",
+ "status": "OK",
+ "durationInMs": 242,
+ "_ref": "5"
+ },
+ {
+ "name": "should_get_all_issues",
+ "status": "OK",
+ "durationInMs": 104,
+ "_ref": "1"
+ },
+ {
+ "name": "should_add_measure",
+ "status": "OK",
+ "durationInMs": 117,
+ "_ref": "5"
+ },
+ {
+ "name": "computeMeasuresOnSampleProject",
+ "status": "OK",
+ "durationInMs": 315,
+ "_ref": "2"
+ },
+ {
+ "name": "test_measure_coder",
+ "status": "OK",
+ "durationInMs": 110,
+ "_ref": "5"
+ },
+ {
+ "name": "should_add_measure_with_too_big_data_for_persistit_pre_patch",
+ "status": "OK",
+ "durationInMs": 821,
+ "_ref": "5"
+ },
+ {
+ "name": "three_parts_key",
+ "status": "OK",
+ "durationInMs": 122,
+ "_ref": "3"
+ },
+ {
+ "name": "two_parts_key",
+ "status": "OK",
+ "durationInMs": 118,
+ "_ref": "3"
+ },
+ {
+ "name": "should_add_new_issue",
+ "status": "OK",
+ "durationInMs": 95,
+ "_ref": "1"
+ },
+ {
+ "name": "empty_cache",
+ "status": "OK",
+ "durationInMs": 104,
+ "_ref": "3"
+ },
+ {
+ "name": "scanProjectWithTestDir",
+ "status": "OK",
+ "durationInMs": 322,
+ "_ref": "7"
+ },
+ {
+ "name": "scanSampleProject",
+ "status": "OK",
+ "durationInMs": 184,
+ "_ref": "4"
+ },
+ {
+ "name": "computeMeasuresOnTempProject",
+ "status": "OK",
+ "durationInMs": 274,
+ "_ref": "2"
+ },
+ {
+ "name": "should_get_and_set_string_data",
+ "status": "OK",
+ "durationInMs": 95,
+ "_ref": "9"
+ }
+], "files": {
+ "3": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CacheTest.java",
+ "longName": "src/test/java/org/sonar/batch/index/CacheTest.java"
+ },
+ "1": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/issue/IssueCacheTest.java",
+ "longName": "src/test/java/org/sonar/batch/issue/IssueCacheTest.java"
+ },
+ "4": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java",
+ "longName": "src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java"
+ },
+ "2": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java",
+ "longName": "src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java"
+ },
+ "8": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java",
+ "longName": "src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java"
+ },
+ "9": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java",
+ "longName": "src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java"
+ },
+ "10": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java",
+ "longName": "src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java"
+ },
+ "7": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java",
+ "longName": "src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java"
+ },
+ "5": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java",
+ "longName": "src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java"
+ },
+ "6": {
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CachesTest.java",
+ "longName": "src/test/java/org/sonar/batch/index/CachesTest.java"
+ }
+}}
--- /dev/null
+{
+ "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CacheTest.java",
+ "path": "src/test/java/org/sonar/batch/index/CacheTest.java",
+ "name": "CacheTest.java",
+ "longName": "src/test/java/org/sonar/batch/index/CacheTest.java",
+ "q": "UTS",
+ "subProject": "org.codehaus.sonar:sonar-batch",
+ "subProjectName": "SonarQube :: Batch",
+ "project": "org.codehaus.sonar:sonar",
+ "projectName": "SonarQube",
+ "fav": false,
+ "canMarkAsFavourite": true,
+ "canBulkChange": true,
+ "canCreateManualIssue": true,
+ "periods": [
+ [1, "since previous analysis (2014 Dec 01)", "2014-12-01T18:51:13+0100"],
+ [2, "over 365 days (2013 Dec 01)", "2013-12-01T00:40:31+0100"],
+ [3, "since previous version (4.5 - 2014 Sep 03)", "2014-09-03T23:16:52+0200"]
+ ],
+ "severities": [],
+ "rules": [],
+ "measures": {
+ "fTests": "6",
+ "fIssues": "0"
+ },
+ "tabs": ["scm"],
+ "manual_rules": [
+ {
+ "key": "manual:api",
+ "name": "API"
+ },
+ {
+ "key": "manual:design",
+ "name": "Design"
+ },
+ {
+ "key": "manual:error_handling",
+ "name": "Error handling"
+ },
+ {
+ "key": "manual:performance",
+ "name": "Performance"
+ },
+ {
+ "key": "manual:sql_pitfalls",
+ "name": "SQL Pitfall"
+ }
+ ]
+}
--- /dev/null
+{"sources": [
+ {
+ "line": 1,
+ "code": "/*",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 2,
+ "code": " * SonarQube, open source software quality management tool.",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+ "scmDate": "2013-04-21T11:58:14+0200"
+ },
+ {
+ "line": 3,
+ "code": " * Copyright (C) 2008-2014 SonarSource",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
+ "scmDate": "2014-03-11T17:52:41+0100"
+ },
+ {
+ "line": 4,
+ "code": " * mailto:contact AT sonarsource DOT com",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 5,
+ "code": " *",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 6,
+ "code": " * SonarQube is free software; you can redistribute it and/or",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+ "scmDate": "2013-04-21T11:58:14+0200"
+ },
+ {
+ "line": 7,
+ "code": " * modify it under the terms of the GNU Lesser General Public",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 8,
+ "code": " * License as published by the Free Software Foundation; either",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 9,
+ "code": " * version 3 of the License, or (at your option) any later version.",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 10,
+ "code": " *",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 11,
+ "code": " * SonarQube is distributed in the hope that it will be useful,",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+ "scmDate": "2013-04-21T11:58:14+0200"
+ },
+ {
+ "line": 12,
+ "code": " * but WITHOUT ANY WARRANTY; without even the implied warranty of",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 13,
+ "code": " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 14,
+ "code": " * Lesser General Public License for more details.",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 15,
+ "code": " *",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 16,
+ "code": " * You should have received a copy of the GNU Lesser General Public License",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+ "scmDate": "2013-04-22T09:37:03+0200"
+ },
+ {
+ "line": 17,
+ "code": " * along with this program; if not, write to the Free Software Foundation,",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+ "scmDate": "2013-04-22T09:37:03+0200"
+ },
+ {
+ "line": 18,
+ "code": " * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+ "scmDate": "2013-04-22T09:37:03+0200"
+ },
+ {
+ "line": 19,
+ "code": " */",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 20,
+ "code": "package org.sonar.batch.index;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 21,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 22,
+ "code": "import com.google.common.collect.Iterables;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 23,
+ "code": "import org.junit.After;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 24,
+ "code": "import org.junit.Before;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 25,
+ "code": "import org.junit.Rule;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 26,
+ "code": "import org.junit.Test;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 27,
+ "code": "import org.junit.rules.TemporaryFolder;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+ "scmDate": "2013-10-15T17:14:44+0200"
+ },
+ {
+ "line": 28,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 29,
+ "code": "import static org.fest.assertions.Assertions.assertThat;",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 30,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 31,
+ "code": "public class CacheTest {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 32,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+ "scmDate": "2013-10-15T17:14:44+0200"
+ },
+ {
+ "line": 33,
+ "code": " @Rule",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 34,
+ "code": " public TemporaryFolder temp = new TemporaryFolder();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 35,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+ "scmDate": "2013-10-15T17:14:44+0200"
+ },
+ {
+ "line": 36,
+ "code": " Caches caches;",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+ "scmDate": "2013-10-15T17:14:44+0200"
+ },
+ {
+ "line": 37,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 38,
+ "code": " @Before",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 39,
+ "code": " public void start() throws Exception {",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+ "scmDate": "2013-10-15T17:14:44+0200"
+ },
+ {
+ "line": 40,
+ "code": " caches = CachesTest.createCacheOnTemp(temp);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+ "scmDate": "2013-10-15T17:14:44+0200"
+ },
+ {
+ "line": 41,
+ "code": " caches.start();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 42,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 43,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 44,
+ "code": " @After",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 45,
+ "code": " public void stop() {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 46,
+ "code": " caches.stop();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 47,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 48,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 49,
+ "code": " @Test",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 50,
+ "code": " public void one_part_key() throws Exception {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 51,
+ "code": " Cache<String> cache = caches.createCache(\"capitals\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 52,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 53,
+ "code": " assertThat(cache.get(\"france\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 54,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 55,
+ "code": " cache.put(\"france\", \"paris\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 56,
+ "code": " cache.put(\"italy\", \"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 57,
+ "code": " assertThat(cache.get(\"france\")).isEqualTo(\"paris\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 58,
+ "code": " assertThat(cache.keySet()).containsOnly(\"france\", \"italy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 59,
+ "code": " assertThat(cache.keySet(\"france\")).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 60,
+ "code": " assertThat(cache.values()).containsOnly(\"paris\", \"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 61,
+ "code": " assertThat(cache.containsKey(\"france\")).isTrue();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 62,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 63,
+ "code": " Cache.Entry[] entries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "db81d934752174207268c49658963ba98665794b",
+ "scmDate": "2014-02-20T07:35:27+0100"
+ },
+ {
+ "line": 64,
+ "code": " assertThat(entries).hasSize(2);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 65,
+ "code": " assertThat(entries[0].key()[0]).isEqualTo(\"france\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 66,
+ "code": " assertThat(entries[0].value()).isEqualTo(\"paris\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 67,
+ "code": " assertThat(entries[1].key()[0]).isEqualTo(\"italy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 68,
+ "code": " assertThat(entries[1].value()).isEqualTo(\"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 69,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 70,
+ "code": " cache.remove(\"france\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 71,
+ "code": " assertThat(cache.get(\"france\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 72,
+ "code": " assertThat(cache.get(\"italy\")).isEqualTo(\"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 73,
+ "code": " assertThat(cache.keySet()).containsOnly(\"italy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 74,
+ "code": " assertThat(cache.keySet(\"france\")).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 75,
+ "code": " assertThat(cache.containsKey(\"france\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 76,
+ "code": " assertThat(cache.containsKey(\"italy\")).isTrue();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 77,
+ "code": " assertThat(cache.values()).containsOnly(\"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 78,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 79,
+ "code": " cache.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 80,
+ "code": " assertThat(cache.values()).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 81,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 82,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 83,
+ "code": " @Test",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 84,
+ "code": " public void test_key_being_prefix_of_another_key() throws Exception {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 85,
+ "code": " Cache<String> cache = caches.createCache(\"components\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 86,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 87,
+ "code": " cache.put(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTag\", \"the Tag\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 88,
+ "code": " cache.put(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTagBeanInfo\", \"the BeanInfo\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 89,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 90,
+ "code": " assertThat(cache.get(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTag\")).isEqualTo(\"the Tag\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 91,
+ "code": " assertThat(cache.get(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTagBeanInfo\")).isEqualTo(\"the BeanInfo\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 92,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 93,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 94,
+ "code": " @Test",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+ "scmDate": "2013-05-31T12:42:59+0200"
+ },
+ {
+ "line": 95,
+ "code": " public void two_parts_key() throws Exception {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 96,
+ "code": " Cache<String> cache = caches.createCache(\"capitals\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 97,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 98,
+ "code": " assertThat(cache.get(\"europe\", \"france\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 99,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 100,
+ "code": " cache.put(\"europe\", \"france\", \"paris\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 101,
+ "code": " cache.put(\"europe\", \"italy\", \"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 102,
+ "code": " cache.put(\"asia\", \"china\", \"pekin\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 103,
+ "code": " assertThat(cache.get(\"europe\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 104,
+ "code": " assertThat(cache.get(\"europe\", \"france\")).isEqualTo(\"paris\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 105,
+ "code": " assertThat(cache.get(\"europe\", \"italy\")).isEqualTo(\"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 106,
+ "code": " assertThat(cache.get(\"europe\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 107,
+ "code": " assertThat(cache.keySet(\"europe\")).containsOnly(\"france\", \"italy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 108,
+ "code": " assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 109,
+ "code": " assertThat(cache.containsKey(\"europe\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 110,
+ "code": " assertThat(cache.containsKey(\"europe\", \"france\")).isTrue();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 111,
+ "code": " assertThat(cache.containsKey(\"europe\", \"spain\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 112,
+ "code": " assertThat(cache.values()).containsOnly(\"paris\", \"rome\", \"pekin\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 113,
+ "code": " assertThat(cache.values(\"america\")).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 114,
+ "code": " assertThat(cache.values(\"europe\")).containsOnly(\"paris\", \"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 115,
+ "code": " assertThat(cache.values(\"oceania\")).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 116,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 117,
+ "code": " Cache.Entry[] allEntries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "db81d934752174207268c49658963ba98665794b",
+ "scmDate": "2014-02-20T07:35:27+0100"
+ },
+ {
+ "line": 118,
+ "code": " assertThat(allEntries).hasSize(3);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 119,
+ "code": " assertThat(allEntries[0].key()).isEqualTo(new String[] {\"asia\", \"china\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 120,
+ "code": " assertThat(allEntries[0].value()).isEqualTo(\"pekin\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 121,
+ "code": " assertThat(allEntries[1].key()).isEqualTo(new String[] {\"europe\", \"france\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 122,
+ "code": " assertThat(allEntries[1].value()).isEqualTo(\"paris\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 123,
+ "code": " assertThat(allEntries[2].key()).isEqualTo(new String[] {\"europe\", \"italy\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 124,
+ "code": " assertThat(allEntries[2].value()).isEqualTo(\"rome\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 125,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 126,
+ "code": " Cache.Entry[] subEntries = Iterables.toArray(cache.entries(\"europe\"), Cache.Entry.class);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 127,
+ "code": " assertThat(subEntries).hasSize(2);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 128,
+ "code": " assertThat(subEntries[0].key()).isEqualTo(new String[] {\"europe\", \"france\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 129,
+ "code": " assertThat(subEntries[0].value()).isEqualTo(\"paris\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 130,
+ "code": " assertThat(subEntries[1].key()).isEqualTo(new String[] {\"europe\", \"italy\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 131,
+ "code": " assertThat(subEntries[1].value()).isEqualTo(\"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 132,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 133,
+ "code": " cache.remove(\"europe\", \"france\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 134,
+ "code": " assertThat(cache.values()).containsOnly(\"rome\", \"pekin\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 135,
+ "code": " assertThat(cache.get(\"europe\", \"france\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 136,
+ "code": " assertThat(cache.get(\"europe\", \"italy\")).isEqualTo(\"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 137,
+ "code": " assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 138,
+ "code": " assertThat(cache.keySet(\"europe\")).containsOnly(\"italy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 139,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 140,
+ "code": " cache.clear(\"america\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 141,
+ "code": " assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 142,
+ "code": " cache.clear();",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 143,
+ "code": " assertThat(cache.keySet()).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 144,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 145,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 146,
+ "code": " @Test",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 147,
+ "code": " public void three_parts_key() throws Exception {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 148,
+ "code": " Cache<String> cache = caches.createCache(\"places\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 149,
+ "code": " assertThat(cache.get(\"europe\", \"france\", \"paris\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 150,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 151,
+ "code": " cache.put(\"europe\", \"france\", \"paris\", \"eiffel tower\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 152,
+ "code": " cache.put(\"europe\", \"france\", \"annecy\", \"lake\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 153,
+ "code": " cache.put(\"europe\", \"france\", \"poitiers\", \"notre dame\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 154,
+ "code": " cache.put(\"europe\", \"italy\", \"rome\", \"colosseum\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 155,
+ "code": " cache.put(\"europe2\", \"ukrania\", \"kiev\", \"dunno\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 156,
+ "code": " cache.put(\"asia\", \"china\", \"pekin\", \"great wall\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 157,
+ "code": " cache.put(\"america\", \"us\", \"new york\", \"empire state building\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 158,
+ "code": " assertThat(cache.get(\"europe\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 159,
+ "code": " assertThat(cache.get(\"europe\", \"france\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 160,
+ "code": " assertThat(cache.get(\"europe\", \"france\", \"paris\")).isEqualTo(\"eiffel tower\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 161,
+ "code": " assertThat(cache.get(\"europe\", \"france\", \"annecy\")).isEqualTo(\"lake\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 162,
+ "code": " assertThat(cache.get(\"europe\", \"italy\", \"rome\")).isEqualTo(\"colosseum\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 163,
+ "code": " assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\", \"america\", \"europe2\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 164,
+ "code": " assertThat(cache.keySet(\"europe\")).containsOnly(\"france\", \"italy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 165,
+ "code": " assertThat(cache.keySet(\"europe\", \"france\")).containsOnly(\"annecy\", \"paris\", \"poitiers\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 166,
+ "code": " assertThat(cache.containsKey(\"europe\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 167,
+ "code": " assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 168,
+ "code": " assertThat(cache.containsKey(\"europe\", \"france\", \"annecy\")).isTrue();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 169,
+ "code": " assertThat(cache.containsKey(\"europe\", \"france\", \"biarritz\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 170,
+ "code": " assertThat(cache.values()).containsOnly(\"eiffel tower\", \"lake\", \"colosseum\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 171,
+ "code": " assertThat(cache.values(\"europe\")).containsOnly(\"eiffel tower\", \"lake\", \"colosseum\", \"notre dame\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 172,
+ "code": " assertThat(cache.values(\"europe\", \"france\")).containsOnly(\"eiffel tower\", \"lake\", \"notre dame\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 173,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 174,
+ "code": " Cache.Entry[] allEntries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "db81d934752174207268c49658963ba98665794b",
+ "scmDate": "2014-02-20T07:35:27+0100"
+ },
+ {
+ "line": 175,
+ "code": " assertThat(allEntries).hasSize(7);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 176,
+ "code": " assertThat(allEntries[0].key()).isEqualTo(new String[] {\"america\", \"us\", \"new york\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 177,
+ "code": " assertThat(allEntries[0].value()).isEqualTo(\"empire state building\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 178,
+ "code": " assertThat(allEntries[1].key()).isEqualTo(new String[] {\"asia\", \"china\", \"pekin\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 179,
+ "code": " assertThat(allEntries[1].value()).isEqualTo(\"great wall\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 180,
+ "code": " assertThat(allEntries[2].key()).isEqualTo(new String[] {\"europe\", \"france\", \"annecy\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 181,
+ "code": " assertThat(allEntries[2].value()).isEqualTo(\"lake\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 182,
+ "code": " assertThat(allEntries[3].key()).isEqualTo(new String[] {\"europe\", \"france\", \"paris\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 183,
+ "code": " assertThat(allEntries[3].value()).isEqualTo(\"eiffel tower\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 184,
+ "code": " assertThat(allEntries[4].key()).isEqualTo(new String[] {\"europe\", \"france\", \"poitiers\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 185,
+ "code": " assertThat(allEntries[4].value()).isEqualTo(\"notre dame\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 186,
+ "code": " assertThat(allEntries[5].key()).isEqualTo(new String[] {\"europe\", \"italy\", \"rome\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 187,
+ "code": " assertThat(allEntries[5].value()).isEqualTo(\"colosseum\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 188,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 189,
+ "code": " Cache.Entry[] subEntries = Iterables.toArray(cache.entries(\"europe\"), Cache.Entry.class);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 190,
+ "code": " assertThat(subEntries).hasSize(4);",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 191,
+ "code": " assertThat(subEntries[0].key()).isEqualTo(new String[] {\"europe\", \"france\", \"annecy\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 192,
+ "code": " assertThat(subEntries[0].value()).isEqualTo(\"lake\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 193,
+ "code": " assertThat(subEntries[1].key()).isEqualTo(new String[] {\"europe\", \"france\", \"paris\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 194,
+ "code": " assertThat(subEntries[1].value()).isEqualTo(\"eiffel tower\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 195,
+ "code": " assertThat(subEntries[2].key()).isEqualTo(new String[] {\"europe\", \"france\", \"poitiers\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 196,
+ "code": " assertThat(subEntries[2].value()).isEqualTo(\"notre dame\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 197,
+ "code": " assertThat(subEntries[3].key()).isEqualTo(new String[] {\"europe\", \"italy\", \"rome\"});",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 198,
+ "code": " assertThat(subEntries[3].value()).isEqualTo(\"colosseum\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 199,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 200,
+ "code": " cache.remove(\"europe\", \"france\", \"annecy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 201,
+ "code": " assertThat(cache.values()).containsOnly(\"eiffel tower\", \"colosseum\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 202,
+ "code": " assertThat(cache.values(\"europe\")).containsOnly(\"eiffel tower\", \"colosseum\", \"notre dame\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 203,
+ "code": " assertThat(cache.values(\"europe\", \"france\")).containsOnly(\"eiffel tower\", \"notre dame\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 204,
+ "code": " assertThat(cache.get(\"europe\", \"france\", \"annecy\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 205,
+ "code": " assertThat(cache.get(\"europe\", \"italy\", \"rome\")).isEqualTo(\"colosseum\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 206,
+ "code": " assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 207,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 208,
+ "code": " cache.clear(\"europe\", \"italy\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 209,
+ "code": " assertThat(cache.values()).containsOnly(\"eiffel tower\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 210,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 211,
+ "code": " cache.clear(\"europe\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 212,
+ "code": " assertThat(cache.values()).containsOnly(\"great wall\", \"empire state building\", \"dunno\");",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 213,
+ "code": "",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 214,
+ "code": " cache.clear();",
+ "scmAuthor": "julien.henry@sonarsource.com",
+ "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+ "scmDate": "2014-05-01T00:00:12+0200"
+ },
+ {
+ "line": 215,
+ "code": " assertThat(cache.values()).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 216,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 217,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 218,
+ "code": " @Test",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 219,
+ "code": " public void remove_versus_clear() throws Exception {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 220,
+ "code": " Cache<String> cache = caches.createCache(\"capitals\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 221,
+ "code": " cache.put(\"europe\", \"france\", \"paris\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 222,
+ "code": " cache.put(\"europe\", \"italy\", \"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 223,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 224,
+ "code": " // remove(\"europe\") does not remove sub-keys",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 225,
+ "code": " cache.remove(\"europe\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 226,
+ "code": " assertThat(cache.values()).containsOnly(\"paris\", \"rome\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 227,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 228,
+ "code": " // clear(\"europe\") removes sub-keys",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 229,
+ "code": " cache.clear(\"europe\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 230,
+ "code": " assertThat(cache.values()).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 231,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 232,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 233,
+ "code": " @Test",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 234,
+ "code": " public void empty_cache() throws Exception {",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 235,
+ "code": " Cache<String> cache = caches.createCache(\"empty\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 236,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 237,
+ "code": " assertThat(cache.get(\"foo\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 238,
+ "code": " assertThat(cache.get(\"foo\", \"bar\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 239,
+ "code": " assertThat(cache.get(\"foo\", \"bar\", \"baz\")).isNull();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 240,
+ "code": " assertThat(cache.keySet()).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 241,
+ "code": " assertThat(cache.keySet(\"foo\")).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 242,
+ "code": " assertThat(cache.containsKey(\"foo\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 243,
+ "code": " assertThat(cache.containsKey(\"foo\", \"bar\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 244,
+ "code": " assertThat(cache.containsKey(\"foo\", \"bar\", \"baz\")).isFalse();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 245,
+ "code": " assertThat(cache.values()).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 246,
+ "code": " assertThat(cache.values(\"foo\")).isEmpty();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 247,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 248,
+ "code": " // do not fail",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 249,
+ "code": " cache.remove(\"foo\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 250,
+ "code": " cache.remove(\"foo\", \"bar\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 251,
+ "code": " cache.remove(\"foo\", \"bar\", \"baz\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 252,
+ "code": " cache.clear(\"foo\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 253,
+ "code": " cache.clear(\"foo\", \"bar\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 254,
+ "code": " cache.clear(\"foo\", \"bar\", \"baz\");",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+ "scmDate": "2014-02-20T07:23:08+0100"
+ },
+ {
+ "line": 255,
+ "code": " cache.clear();",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+ "scmDate": "2013-04-16T17:26:34+0200"
+ },
+ {
+ "line": 256,
+ "code": " }",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+ "scmDate": "2013-04-17T10:35:23+0200"
+ },
+ {
+ "line": 257,
+ "code": "}",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ },
+ {
+ "line": 258,
+ "code": "",
+ "scmAuthor": "simon.brandhof@gmail.com",
+ "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+ "scmDate": "2013-04-16T13:24:54+0200"
+ }
+]}
--- /dev/null
+{"tests": [
+ {
+ "name": "two_parts_key",
+ "status": "OK",
+ "durationInMs": 324,
+ "coveredLines": 0
+ },
+ {
+ "name": "remove_versus_clear",
+ "status": "OK",
+ "durationInMs": 81,
+ "coveredLines": 0
+ },
+ {
+ "name": "three_parts_key",
+ "status": "OK",
+ "durationInMs": 93,
+ "coveredLines": 0
+ },
+ {
+ "name": "test_key_being_prefix_of_another_key",
+ "status": "OK",
+ "durationInMs": 89,
+ "coveredLines": 0
+ },
+ {
+ "name": "one_part_key",
+ "status": "OK",
+ "durationInMs": 91,
+ "coveredLines": 0
+ },
+ {
+ "name": "empty_cache",
+ "status": "OK",
+ "durationInMs": 88,
+ "coveredLines": 0
+ }
+]}
+++ /dev/null
-extends ./layouts/main
-
-block header
- script.
- localStorage.removeItem('componentViewerSCM');
- script(data-main='/js/component-viewer/app', src='../js/require.js')
-
-block body
- #component-viewer
--- /dev/null
+extends ./layouts/main
+
+block header
+ script(data-main='/js/source-viewer/app', src='../js/require.js')
+
+block body
+ #source-viewer
+
+ script.
+ window.file = {
+ uuid: '',
+ key: ''
+ };
// Configure sectors
this.sectors = this.plotWrap.selectAll('.arc')
.data(this.pie(this.components()));
+ console.log(this.components());
this.sectors
.enter()
@import "components/facets";
@import "components/modals";
@import "components/issues";
+@import "components/measures";
--- /dev/null
+@import (reference) "../variables";
+@import (reference) "../mixins";
+@import (reference) "../ui";
+
+
+.measures {
+ font-size: 0;
+}
+
+.measures + .measures {
+ margin-top: 15px;
+ padding-top: 15px;
+ border-top: 1px solid @barBorderColor;
+}
+
+.measures-duplex {
+ .measures-list {
+ vertical-align: top;
+ width: 50%;
+ }
+}
+
+.measures-chart {
+ display: inline-block;
+ vertical-align: middle;
+ width: 70px;
+ margin-right: 20px;
+ text-align: center;
+
+ .rating {
+ font-size: 32px;
+ }
+}
+
+.measures-list {
+ display: inline-block;
+ vertical-align: middle;
+ font-size: @baseFontSize;
+}
+
+.measure {
+ line-height: 1.3333333333333;
+}
+
+.measure + .measure {
+ margin-top: 6px;
+}
+
+.measure-name {
+ display: block;
+}
+
+.measure-value {
+ color: @darkBlue;
+ font-size: @bigFontSize;
+ font-weight: 300;
+}
+
+.measure-big {
+ .measure-name {
+ font-size: 16px;
+ font-weight: 300;
+ }
+
+ .measure-value {
+ font-size: 22px;
+ font-weight: 300;
+ }
+}
+
+.measure-one-line {
+ .measure-name {
+ display: inline;
+
+ &:after {
+ content: ":";
+ }
+ }
+}
+
@import (reference) "../mixins";
@import (reference) "../variables";
+@import (reference) "../ui";
@lineHeight: 18px;
@lineWithIssuesBackground: #ffeaea;
@duplicationColor: #f3ca8e;
-.source {
+.source-viewer {
width: 100%;
border: 1px solid @barBorderColor;
.box-sizing(border-box);
}
}
+.source-line-shadowed {
+ .source-line-code {
+ opacity: 0.4;
+ }
+}
+
.source-line-expand {
.source-line-code {
background: url(../images/gray-stripes.png) repeat;
}
}
-.source pre {
+.source-viewer pre {
height: @lineHeight;
padding: 0;
}
-.source pre,
+.source-viewer pre,
.source-meta {
line-height: @lineHeight;
font-family: @monoFontFamily;
background-color: @duplicationColor !important;
cursor: pointer;
}
+
+
+// Header
+
+.source-viewer-header {
+ .clearfix;
+ position: relative;
+ padding: 2px 10px 4px;
+ border-bottom: 1px solid @barBorderColor;
+ background-color: @barBackgroundColor;
+}
+
+.source-viewer-header-bar + .source-viewer-header-bar {
+ border-top: 1px solid @barBorderColor;
+}
+
+.source-viewer-header-component {
+ float: left;
+ line-height: 20px;
+}
+
+.source-viewer-header-component-project {
+ color: #777;
+ font-size: @smallFontSize;
+}
+
+.source-viewer-header-component-name {
+ font-weight: 500;
+}
+
+.source-viewer-header-favorite {
+ position: relative;
+ top: -2px;
+ margin-left: 4px;
+ .link-no-underline;
+}
+
+.source-viewer-header-measures {
+ float: right;
+}
+
+.source-viewer-header-measures-scope {
+ position: relative;
+ float: left;
+}
+
+.source-viewer-header-measure {
+ display: inline-block;
+ vertical-align: middle;
+ padding: 3px 0;
+ font-size: @baseFontSize;
+
+ .rating {
+ font-size: 18px;
+ }
+}
+
+.source-viewer-header-measure + .source-viewer-header-measure {
+ margin-left: 25px;
+}
+
+.source-viewer-header-measure-label {
+ display: block;
+ margin-top: 4px;
+ line-height: @smallFontSize;
+ color: #777;
+ font-size: @smallFontSize;
+}
+
+.source-viewer-header-measure-value {
+ display: block;
+ line-height: 18px;
+ color: @baseFontColor;
+ font-size: 18px;
+ font-weight: 300;
+}
+
+.source-viewer-header-measure-issues {
+ width: 45px;
+}
+
+.source-viewer-header-measure-issue {
+ min-width: 1px;
+ height: 6px;
+
+ &.s-blocker { background-color: @severityBlockerColor; }
+ &.s-critical { background-color: @severityCriticalColor; }
+ &.s-major { background-color: @severityMajorColor; }
+ &.s-minor { background-color: @severityMinorColor; }
+ &.s-info { background-color: @severityInfoColor; }
+}
+
+.source-viewer-header-measure-issue + .source-viewer-header-measure-issue {
+ margin-top: 1px;
+}
+
+.source-viewer-header-actions {
+ float: right;
+ display: block;
+ margin-left: 25px;
+ padding: 13px 5px;
+}
+
+.source-viewer-header-more-actions {
+ position: absolute;
+ z-index: 100;
+ right: -1px;
+ top: 100%;
+ padding: 10px;
+ border: 1px solid @barBorderColor;
+ background-color: @white;
+ line-height: 1.8;
+}
+
+.source-viewer-measures {
+ width: 1080px;
+ margin: 0 auto;
+ border-collapse: collapse;
+ table-layout: fixed;
+}
+
+.source-viewer-measures-section {
+ vertical-align: top;
+ width: 25%;
+ padding: 0 15px;
+}
+
+//.source-viewer-measures-section + .source-viewer-measures-section {
+// border-left: 1px solid @barBorderColor;
+//}
+
+.source-viewer-tests-list {
+ width: 100%;
+ font-size: @baseFontSize;
+
+ .subtitle {
+ font-size: @smallFontSize;
+ }
+}
+
+.source-viewer-test-status,
+.source-viewer-test-duration,
+.source-viewer-test-covered-lines {
+ width: 1px;
+}
+
+.source-viewer-test-status,
+.source-viewer-test-duration,
+.source-viewer-test-covered-lines,
+.source-viewer-test-covered-name {
+ vertical-align: middle;
+ padding: 3px;
+}
+
+.source-viewer-test-name {
+ padding-left: 10px;
+ word-break: break-all;
+}
+
+.source-viewer-test-covered-lines {
+ text-align: right;
+}
SECTION=Navigation::SECTION_RESOURCE
def index
+ load_resource()
+ @line = params[:line]
+
if request.xhr?
render :action => 'index'
else
end
end
+ private
+
+ def load_resource
+ if params[:id]
+ @resource=Project.by_key(params[:id])
+ return project_not_found unless @resource
+ @resource=@resource.permanent_resource
+
+ @snapshot=@resource.last_snapshot
+ return project_not_analyzed unless @snapshot
+
+ access_denied unless has_role?(:user, @resource)
+ end
+ end
+
end
<% content_for :script do %>
- <script data-main="<%= ApplicationController.root_context -%>/js/component-viewer/app" src="<%= ApplicationController.root_context -%>/js/require.js"></script>
+ <script data-main="<%= ApplicationController.root_context -%>/js/source-viewer/app" src="<%= ApplicationController.root_context -%>/js/require.js"></script>
<% end %>
-<div id="component-viewer"></div>
\ No newline at end of file
+<div id="source-viewer"></div>
+
+<script type="text/javascript">
+ window.file = {
+ uuid: '<%= @resource.uuid -%>',
+ key: '<%= @resource.key -%>'
+ <% if @line %>,line: <%= @line -%><% end %>
+ };
+</script>
+
<% content_for :script do %>
- <script data-main="<%= ApplicationController.root_context -%>/js/dashboard/file-app" src="<%= ApplicationController.root_context -%>/js/require.js"></script>
+ <script data-main="<%= ApplicationController.root_context -%>/js/source-viewer/app" src="<%= ApplicationController.root_context -%>/js/require.js"></script>
<% end %>
-<div class="marginbottom10"></div>
-<div id="accordion-panel"></div>
+<div class="page">
+ <div id="source-viewer"></div>
+</div>
<script type="text/javascript">
- window.fileKey = '<%= @file.key -%>';
- window.metric = '<%= @metric -%>';
+ window.file = {
+ uuid: '<%= @resource.uuid -%>',
+ key: '<%= @resource.key -%>'
+ };
document.getElementById('crumbs').remove();
</script>
+
<%= qualifier_icon(resource) -%>
<% if resource.source_code? %>
<a href="#" title="<%= h resource.name(true) -%>" data-key="<%= resource.key -%>"
- class="js-drilldown-link"><%= h resource.name(false) %></a>
+ data-uuid="<%= resource.uuid -%>" class="js-drilldown-link"><%= h resource.name(false) %></a>
<% else %>
<%= link_to(h(resource.name), params.merge({:only_path => true, :rids => (selected ? rids-[resource.id] : rids+[resource.id])})) -%>
<% end %>
};
</script>
-<div id="accordion-panel"/>
+<div id="source-viewer"></div>
<%= render :partial => 'footer' -%>
#--------------------------------------------------------------------------------------------------------------------
metric.sqale_index.name=Technical Debt
+metric.sqale_index.short_name=Debt
metric.sqale_index.description=Total effort (in days) to fix all the issues on the component and therefore to comply to all the requirements.
metric.new_technical_debt.name=Added Technical Debt
+metric.new_technical_debt.short_name=Added Debt
metric.new_technical_debt.description=Added Technical Debt
metric.sqale_rating.name=SQALE Rating
metric.sqale_rating.description=Rating of the technical debt ratio based on the SQALE Governance Model.
metric.sqale_debt_ratio.name=Technical Debt Ratio
+metric.sqale_debt_ratio.short_name=Debt Ratio
metric.sqale_debt_ratio.description=Ratio of the actual technical debt compared to the estimated cost to develop the whole source code from scratch.
component_viewer.tests.ordered_by=ordered by
component_viewer.tests.duration=duration
component_viewer.tests.test_name=name
+component_viewer.tests.status=status
component_viewer.x_lines_are_covered={0} lines are covered
component_viewer.details=Details
component_viewer.issues_limit_reached=For usability reasons, only the {0} first issues will be fully displayed. Remaining issues will simply be underlined.
component_viewer.issues_limit_reached_tooltip={0}\n\nRefine your filter to be able to see the details of this issue.
component_viewer.cannot_show=We're sorry, but something went wrong. Please try back in a few minutes and contact support if the problem persists.
+component_viewer.show_measures=Show Measures
component_viewer.workspace=Workspace
component_viewer.workspace.tooltip=Keeps track of history of navigation