import { TypeScriptClasses } from '../../core/domain/TypeScriptClass';
import { TypeScriptMethod } from '../../core/domain/TypeScriptMethod';
import { AllowEmptyShould } from '../AllowEmptyShould';
import { ArchCondition } from '../ArchCondition';
import { ArchRule } from '../ArchRule';
import { EvaluationResult } from '../EvaluationResult';
import { MethodsTransformer } from '../MethodsTransformer';
import { ConditionAggregator } from './ConditionAggregator';
import { ClassesThat } from './elements/ClassesThat';
import { MethodsShould, MethodsShouldConjunction } from './elements/MethodsShould';
export declare class MethodsShouldInternal implements ArchRule, MethodsShould, MethodsShouldConjunction {
    private readonly methodsTransformer;
    private readonly conditionAggregator;
    private readonly prepareCondition;
    private overriddenDescription;
    private readonly allowEmptyShouldValue;
    constructor(methodsTransformer: MethodsTransformer, conditionAggregator: ConditionAggregator<TypeScriptMethod>, prepareCondition: (condition: ArchCondition<TypeScriptMethod>) => ArchCondition<TypeScriptMethod>, allowEmptyShould: AllowEmptyShould);
    because(reason: string): ArchRule;
    check(classes: TypeScriptClasses): void;
    private reason;
    getDescription(): string;
    evaluate(classes: TypeScriptClasses): EvaluationResult;
    beDecoratedWith(decorator: string): MethodsShouldConjunction;
    beAsync(): MethodsShouldConjunction;
    beDeclaredInClassesThat(): ClassesThat<MethodsShouldConjunction>;
    orShould(): MethodsShould;
    andShould(): MethodsShould;
    allowEmptyShould(allow: boolean): MethodsShouldConjunction;
    private addCondition;
    private verifyNoEmptyShouldIfEnabled;
}
