/*
 * Copyright 2015-present Facebook, Inc.
 *
 * 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.facebook.buck.cxx;

import com.facebook.buck.io.BuildCellRelativePath;
import com.facebook.buck.io.ProjectFilesystem;
import com.facebook.buck.log.Logger;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.model.BuildTargets;
import com.facebook.buck.rules.AddToRuleKey;
import com.facebook.buck.rules.BuildContext;
import com.facebook.buck.rules.BuildableContext;
import com.facebook.buck.rules.ExplicitBuildTargetSourcePath;
import com.facebook.buck.rules.SourcePath;
import com.facebook.buck.step.Step;
import com.facebook.buck.step.fs.MkdirStep;
import com.facebook.buck.step.fs.RmStep;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.nio.file.Path;
import java.util.Optional;

public class DirectHeaderMap extends HeaderSymlinkTree {

  private static final Logger LOG = Logger.get(DirectHeaderMap.class);

  @AddToRuleKey(stringify = true)
  private final Path headerMapPath;

  public DirectHeaderMap(
      BuildTarget target,
      ProjectFilesystem filesystem,
      Path root,
      ImmutableMap<Path, SourcePath> links) {
    super(target, filesystem, root, links);
    this.headerMapPath = BuildTargets.getGenPath(filesystem, target, "%s.hmap");
  }

  @Override
  public SourcePath getSourcePathToOutput() {
    return new ExplicitBuildTargetSourcePath(getBuildTarget(), headerMapPath);
  }

  @Override
  public ImmutableList<Step> getBuildSteps(
      BuildContext context, BuildableContext buildableContext) {
    LOG.debug("Generating post-build steps to write header map to %s", headerMapPath);
    ImmutableMap.Builder<Path, Path> headerMapEntries = ImmutableMap.builder();
    for (Path key : getLinks().keySet()) {
      Path path = context.getSourcePathResolver().getAbsolutePath(getLinks().get(key));
      LOG.debug("header map %s -> %s", key, path);
      headerMapEntries.put(key, path);
    }
    return ImmutableList.<Step>builder()
        .add(getVerifyStep())
        .add(
            MkdirStep.of(
                BuildCellRelativePath.fromCellRelativePath(
                    context.getBuildCellRootPath(),
                    getProjectFilesystem(),
                    headerMapPath.getParent())))
        .add(
            RmStep.of(
                BuildCellRelativePath.fromCellRelativePath(
                    context.getBuildCellRootPath(), getProjectFilesystem(), headerMapPath)))
        .add(new HeaderMapStep(getProjectFilesystem(), headerMapPath, headerMapEntries.build()))
        .build();
  }

  @Override
  public Path getIncludePath() {
    return getProjectFilesystem().resolve(getProjectFilesystem().getBuckPaths().getBuckOut());
  }

  @Override
  public Optional<Path> getHeaderMap() {
    return Optional.of(getProjectFilesystem().resolve(headerMapPath));
  }
}

@@ -1339,24 +1339,46 @@
 .file.Path;%0A
+import java.util.Map;%0A
 import java.
@@ -1392,16 +1392,16 @@
 tional;%0A
-
 %0Apublic 
@@ -2168,13 +2168,8 @@
 ing 
-post-
 buil
@@ -2257,32 +2257,30 @@
 , Path%3E 
-headerMapEntries
+entriesBuilder
  = Immut
@@ -2311,15 +2311,40 @@
 or (
-Path ke
+Map.Entry%3CPath, SourcePath%3E entr
 y : 
@@ -2354,18 +2354,20 @@
 Links().
-k
 e
+ntr
 ySet()) 
@@ -2378,19 +2378,53 @@
     
-Path path =
+entriesBuilder.put(%0A          entry.getKey(),
  con
@@ -2472,117 +2472,25 @@
 ath(
-getLinks().get(key));%0A      LOG.debug(%22header map %25s -%3E %25s%22, key, path);%0A      headerMapEntries.put(key, path
+entry.getValue())
 );%0A 
@@ -3074,24 +3074,22 @@
 th, 
-headerMapEntries
+entriesBuilder
 .bui

Stop logging every single entry of every generated header map