////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001-2017 the original author or authors.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
////////////////////////////////////////////////////////////////////////////////

package com.puppycrawl.tools.checkstyle;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * This annotation means that the check contains file-related context and therefore
 * cannot be used from the others threads at the same time.
 * This annotation should be used when the check holds a thread-unsafe state.
 * Checker guarantees that the whole file processed inside the same thread.
 * Checker guarantees that the whole file processed with the same check instance.
 * Checker guarantees that each check instance processes only one file at the same time.
 * Checker guarantees that all check instances have equal (but not the same) configuration.
 * It means, that if a check holds a property of type "array of strings",
 * the property value will not be shared across check instances.
 * Instead, each check instance will hold its own array instance.
 * Checker does not guarantee that each file will have it's own thread -
 * there might be a list of files, which will be executed on the same thread.
 * Checker does not guarantee that each file will have it's own check instance -
 * there might be a list of files, which will be checked by the same instance.
 * Note: Checks with such annotation will be executed in mode how all Checks worked
 * before MT mode is introduced.
 * @author Andrew Kuchev
 * @noinspection AnnotationClass, ClassIndependentOfModule
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface FileStatefulCheck {
    // this annotation does not have properties
}
