/*
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.lang.dart.coverage;
import com.intellij.util.containers.hash.HashMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
public class DartCoverageData {
@Nullable private List<DartFileCoverageData> coverage;
@Nullable
public List<DartFileCoverageData> getCoverage() {
return coverage;
}
public void setCoverage(@Nullable List<DartFileCoverageData> coverage) {
this.coverage = coverage;
}
@NotNull
public Map<String, SortedMap<Integer, Integer>> getMergedDartFileCoverageData() {
Map<String, SortedMap<Integer, Integer>> mergedCoverageData = new HashMap<>();
List<DartFileCoverageData> coverageData = getCoverage();
if (coverageData != null) {
for (DartFileCoverageData item : coverageData) {
String source = item.getSource();
if (source == null) {
continue;
}
if (!mergedCoverageData.containsKey(source)) {
mergedCoverageData.put(source, new TreeMap<>());
}
SortedMap<Integer, Integer> fileData = mergedCoverageData.get(source);
List<Integer> hits = item.getHits();
if (hits == null) {
continue;
}
for (int i = 0; i < hits.size(); i += 2) {
Integer lineNumber = hits.get(i);
Integer hitCount = hits.get(i + 1);
if (!fileData.containsKey(lineNumber)) {
fileData.put(lineNumber, 0);
}
fileData.put(lineNumber, fileData.get(lineNumber) + hitCount);
}
}
}
return mergedCoverageData;
}
}
class DartFileCoverageData {
@Nullable private String source;
@Nullable private List<Integer> hits;
@Nullable
public String getSource() {
return source;
}
public void setSource(@Nullable String source) {
this.source = source;
}
@Nullable
public List<Integer> getHits() {
return hits;
}
public void setHits(@Nullable List<Integer> hits) {
this.hits = hits;
}
}