/*
 * Copyright 2013-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.rules.coercer;

import com.facebook.buck.io.ProjectFilesystem;
import com.facebook.buck.parser.BuildTargetParser;

import java.nio.file.Path;

public class PathTypeCoercer extends LeafTypeCoercer<Path> {

  @Override
  public Class<Path> getOutputClass() {
    return Path.class;
  }

  @Override
  public Path coerce(
      BuildTargetParser buildTargetParser,
      ProjectFilesystem filesystem,
      Path pathRelativeToProjectRoot,
      Object object) throws CoerceFailedException {
    if (object instanceof String) {
      String path = (String) object;
      final Path normalizedPath;

      // Normalize the path.
      try {
        normalizedPath = pathRelativeToProjectRoot.resolve(path).normalize();
      } catch (RuntimeException e) {
        throw new CoerceFailedException("invalid path", e);
      }

      // Verify that the path exists
      try {
        filesystem.getPathForRelativeExistingPath(normalizedPath);
      } catch (RuntimeException e) {
        throw new CoerceFailedException(
            String.format("no such file or directory '%s'", normalizedPath),
            e);
      }

      return normalizedPath;
    } else {
      throw CoerceFailedException.simple(object, getOutputClass());
    }
  }
}

@@ -1191,90 +1191,118 @@
 ct;%0A
+%0A
       
-final Path normalizedPath;%0A%0A      // Normalize the
+if (path.isEmpty()) %7B%0A        throw new CoerceFailedException(%22invalid
  path
-.
+%22);
 %0A      
-try %7B
+%7D
 %0A      
- 
+final Path
  nor
@@ -1371,113 +1371,8 @@
 e();
-%0A      %7D catch (RuntimeException e) %7B%0A        throw new CoerceFailedException(%22invalid path%22, e);%0A      %7D
 %0A%0A  

Replace questionable logic in PathTypeCoercer