import { TypeScriptClass, TypeScriptClasses } from '../../core/domain/TypeScriptClass';
import { AllowEmptyShould } from '../AllowEmptyShould';
import { ArchCondition } from '../ArchCondition';
import { ArchRule } from '../ArchRule';
import { ClassesTransformer } from '../ClassesTransformer';
import { EvaluationResult } from '../EvaluationResult';
import { ConditionAggregator } from './ConditionAggregator';
import { ClassesShould, ClassesShouldConjunction } from './elements/ClassesShould';
import { ClassesThat } from './elements/ClassesThat';
export declare class ClassesShouldInternal implements ArchRule, ClassesShould, ClassesShouldConjunction {
    private readonly classesTransformer;
    private readonly conditionAggregator;
    private readonly prepareCondition;
    private overriddenDescription;
    private readonly allowEmptyShouldValue;
    constructor(classesTransformer: ClassesTransformer, conditionAggregator: ConditionAggregator<TypeScriptClass>, prepareCondition: (archCondition: ArchCondition<TypeScriptClass>) => ArchCondition<TypeScriptClass>, allowEmptyShould: AllowEmptyShould);
    because(reason: string): ArchRule;
    check(classes: TypeScriptClasses): void;
    private reason;
    onlyDependOnClassesThat(): ClassesThat<ClassesShouldConjunction>;
    dependOnClassesThat(): ClassesThat<ClassesShouldConjunction>;
    onlyHaveDependentClassesThat(): ClassesThat<ClassesShouldConjunction>;
    getDescription(): string;
    evaluate(classes: TypeScriptClasses): EvaluationResult;
    andShould(): ClassesShould;
    orShould(): ClassesShould;
    allowEmptyShould(allowEmptyShould: boolean): ClassesShouldConjunction;
    haveSimpleNameStartingWith(prefix: string): ClassesShouldConjunction;
    haveSimpleNameEndingWith(suffix: string): ClassesShouldConjunction;
    addCondition(condition: ArchCondition<TypeScriptClass>): ClassesShouldInternal;
    copyWithNewCondition(newCondition: ConditionAggregator<TypeScriptClass>): ClassesShouldInternal;
    private verifyNoEmptyShouldIfEnabled;
}
