/*
 * Copyright 2012-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;

public interface JavaPackageFinder {

  /**
   * Given the relative path to a file under the project root, return the Java package with which
   * the file is associated. For .java files, this is generally obvious, as they contain an explicit
   * "package" statement. For other files, such as resources, other heuristics must be used.
   * @param pathRelativeToProjectRoot may be a path to either a file or a directory. If a directory,
   *     then it must end in a slash.
   * @return a path that always ends with a slash, or the empty string, indicating the root
   *     directory.
   */
  public String findJavaPackageFolderForPath(String pathRelativeToProjectRoot);

  public String findJavaPackageForPath(String pathRelativeToProjectRoot);
}
