// Copyright 2018 The Bazel Authors. All rights reserved. // // 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.google.devtools.lcovmerger; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import java.util.List; import javax.annotation.Nullable; @AutoValue abstract class LcovMergerFlags { @Nullable abstract String coverageDir(); @Nullable abstract String reportsFile(); abstract String outputFile(); abstract List filterSources(); /** Parse flags in the form of "--coverage_dir=... -output_file=..." */ static LcovMergerFlags parseFlags(String[] args) { ImmutableList.Builder filterSources = new ImmutableList.Builder<>(); String coverageDir = null; String reportsFile = null; String outputFile = null; for (String arg : args) { if (!arg.startsWith("--")) { throw new IllegalArgumentException("Argument (" + arg + ") should start with --"); } String[] parts = arg.substring(2).split("=", 2); if (parts.length != 2) { throw new IllegalArgumentException("There should be = in argument (" + arg + ")"); } switch (parts[0]) { case "coverage_dir": coverageDir = parts[1]; break; case "reports_file": reportsFile = parts[1]; break; case "output_file": outputFile = parts[1]; break; case "filter_sources": filterSources.add(parts[1]); break; default: throw new IllegalArgumentException("Unknown flag " + arg); } } if (coverageDir == null && reportsFile == null) { throw new IllegalArgumentException( "At least one of --coverage_dir or --reports_file should be specified."); } if (coverageDir != null && reportsFile != null) { throw new IllegalArgumentException( "Only one of --coverage_dir or --reports_file must be specified."); } if (outputFile == null) { throw new IllegalArgumentException("--output_file was not specified."); } return new AutoValue_LcovMergerFlags( coverageDir, reportsFile, outputFile, filterSources.build()); } }