package org.checkerframework.checker.propkey;

import java.util.Locale;
import java.util.ResourceBundle;
import org.checkerframework.common.basetype.BaseTypeChecker;
import org.checkerframework.framework.qual.RelevantJavaTypes;
import org.checkerframework.framework.source.SupportedOptions;

/**
 * A type-checker that checks that only valid keys are used to access property files and resource
 * bundles. Subclasses can specialize this class for the different uses of property files, for
 * examples see the I18n Checker and Compiler Messages Checker.
 *
 * <p>Currently, the checker supports two methods to check:
 *
 * <ol>
 *   <li value="1">Property files: A common method for localization using a property file, mapping
 *       the keys to values. Programmers pass the property file locations via {@code propfiles}
 *       option (e.g. {@code -Apropfiles=/path/to/messages.properties}), separating multiple files
 *       by {@link java.io.File#pathSeparator}.
 *   <li value="2">{@link ResourceBundle}: Programmers pass the {@code baseName} name of the bundle
 *       via {@code bundlename} (e.g. {@code -Abundlename=MyResource}. The checker uses the resource
 *       associated with the default {@link Locale} in the compilation system.
 * </ol>
 *
 * @checker_framework.manual #propkey-checker Property File Checker
 */
// Subclasses need something similar to this:
@SupportedOptions({"propfiles", "bundlenames"})
@RelevantJavaTypes(CharSequence.class)
public class PropertyKeyChecker extends BaseTypeChecker {}
