/* * Copyright 2017 TNG Technology Consulting GmbH * * 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.tngtech.archunit.lang.syntax; import java.lang.annotation.Annotation; import com.tngtech.archunit.base.DescribedPredicate; import com.tngtech.archunit.core.domain.JavaAnnotation; import com.tngtech.archunit.core.domain.JavaClass; import com.tngtech.archunit.core.domain.JavaModifier; import com.tngtech.archunit.lang.syntax.elements.GivenClassesConjunction; import com.tngtech.archunit.lang.syntax.elements.GivenClassesThat; import static com.tngtech.archunit.base.DescribedPredicate.dont; import static com.tngtech.archunit.base.DescribedPredicate.not; import static com.tngtech.archunit.core.domain.JavaClass.Predicates.assignableTo; import static com.tngtech.archunit.core.domain.properties.CanBeAnnotated.Predicates.annotatedWith; import static com.tngtech.archunit.core.domain.properties.HasName.Predicates.nameMatching; import static com.tngtech.archunit.lang.conditions.ArchPredicates.are; import static com.tngtech.archunit.lang.conditions.ArchPredicates.have; import static com.tngtech.archunit.lang.syntax.ClassesThatPredicates.implementPredicate; class GivenClassesThatInternal implements GivenClassesThat { private final GivenClassesInternal givenClasses; private final PredicateAggregator<JavaClass> currentPredicate; GivenClassesThatInternal(GivenClassesInternal givenClasses, PredicateAggregator<JavaClass> predicate) { this.givenClasses = givenClasses; this.currentPredicate = predicate; } @Override public GivenClassesConjunction resideInAPackage(String packageIdentifier) { return givenWith(JavaClass.Predicates.resideInAPackage(packageIdentifier)); } @Override public GivenClassesConjunction resideInAnyPackage(String... packageIdentifiers) { return givenWith(JavaClass.Predicates.resideInAnyPackage(packageIdentifiers)); } @Override public GivenClassesConjunction resideOutsideOfPackage(String packageIdentifier) { return givenWith(JavaClass.Predicates.resideOutsideOfPackage(packageIdentifier)); } @Override public GivenClassesConjunction resideOutsideOfPackages(String... packageIdentifiers) { return givenWith(JavaClass.Predicates.resideOutsideOfPackages(packageIdentifiers)); } @Override public GivenClassesConjunction areAnnotatedWith(Class<? extends Annotation> annotationType) { return givenWith(are(annotatedWith(annotationType))); } @Override public GivenClassesConjunction areNotAnnotatedWith(Class<? extends Annotation> annotationType) { return givenWith(are(not(annotatedWith(annotationType)))); } @Override public GivenClassesConjunction areAnnotatedWith(String annotationTypeName) { return givenWith(are(annotatedWith(annotationTypeName))); } @Override public GivenClassesConjunction areNotAnnotatedWith(String annotationTypeName) { return givenWith(are(not(annotatedWith(annotationTypeName)))); } @Override public GivenClassesConjunction areAnnotatedWith(DescribedPredicate<? super JavaAnnotation> predicate) { return givenWith(are(annotatedWith(predicate))); } @Override public GivenClassesConjunction areNotAnnotatedWith(DescribedPredicate<? super JavaAnnotation> predicate) { return givenWith(are(not(annotatedWith(predicate)))); } @Override public GivenClassesConjunction implement(Class<?> type) { return givenWith(implementPredicate(assignableTo(type))); } @Override public GivenClassesConjunction dontImplement(Class<?> type) { return givenWith(dont(implementPredicate(assignableTo(type)))); } @Override public GivenClassesConjunction implement(String typeName) { return givenWith(implementPredicate(assignableTo(typeName))); } @Override public GivenClassesConjunction dontImplement(String typeName) { return givenWith(dont(implementPredicate(assignableTo(typeName)))); } @Override public GivenClassesConjunction implement(DescribedPredicate<? super JavaClass> predicate) { return givenWith(implementPredicate(assignableTo(predicate))); } @Override public GivenClassesConjunction dontImplement(DescribedPredicate<? super JavaClass> predicate) { return givenWith(dont(implementPredicate(assignableTo(predicate)))); } @Override public GivenClassesConjunction haveNameMatching(String regex) { return givenWith(have(nameMatching(regex))); } @Override public GivenClassesConjunction haveNameNotMatching(String regex) { return givenWith(ClassesThatPredicates.haveNameNotMatching(regex)); } @Override public GivenClassesConjunction areAssignableTo(Class<?> type) { return givenWith(are(assignableTo(type))); } @Override public GivenClassesConjunction areNotAssignableTo(Class<?> type) { return givenWith(are(not(assignableTo(type)))); } @Override public GivenClassesConjunction areAssignableTo(String typeName) { return givenWith(are(assignableTo(typeName))); } @Override public GivenClassesConjunction areNotAssignableTo(String typeName) { return givenWith(are(not(assignableTo(typeName)))); } @Override public GivenClassesConjunction areAssignableTo(DescribedPredicate<? super JavaClass> predicate) { return givenWith(are(assignableTo(predicate))); } @Override public GivenClassesConjunction areNotAssignableTo(DescribedPredicate<? super JavaClass> predicate) { return givenWith(are(not(assignableTo(predicate)))); } @Override public GivenClassesConjunction areAssignableFrom(Class<?> type) { return givenWith(are(JavaClass.Predicates.assignableFrom(type))); } @Override public GivenClassesConjunction areNotAssignableFrom(Class<?> type) { return givenWith(are(not(JavaClass.Predicates.assignableFrom(type)))); } @Override public GivenClassesConjunction areAssignableFrom(String typeName) { return givenWith(are(JavaClass.Predicates.assignableFrom(typeName))); } @Override public GivenClassesConjunction areNotAssignableFrom(String typeName) { return givenWith(are(not(JavaClass.Predicates.assignableFrom(typeName)))); } @Override public GivenClassesConjunction areAssignableFrom(DescribedPredicate<? super JavaClass> predicate) { return givenWith(are(JavaClass.Predicates.assignableFrom(predicate))); } @Override public GivenClassesConjunction areNotAssignableFrom(DescribedPredicate<? super JavaClass> predicate) { return givenWith(are(not(JavaClass.Predicates.assignableFrom(predicate)))); } @Override public GivenClassesConjunction arePublic() { return givenWith(ClassesThatPredicates.arePublic()); } @Override public GivenClassesConjunction areNotPublic() { return givenWith(ClassesThatPredicates.areNotPublic()); } @Override public GivenClassesConjunction areProtected() { return givenWith(ClassesThatPredicates.areProtected()); } @Override public GivenClassesConjunction areNotProtected() { return givenWith(ClassesThatPredicates.areNotProtected()); } @Override public GivenClassesConjunction arePackagePrivate() { return givenWith(ClassesThatPredicates.arePackagePrivate()); } @Override public GivenClassesConjunction areNotPackagePrivate() { return givenWith(ClassesThatPredicates.areNotPackagePrivate()); } @Override public GivenClassesConjunction arePrivate() { return givenWith(ClassesThatPredicates.arePrivate()); } @Override public GivenClassesConjunction areNotPrivate() { return givenWith(ClassesThatPredicates.areNotPrivate()); } @Override public GivenClassesConjunction haveFullyQualifiedName(String name) { return givenWith(ClassesThatPredicates.haveFullyQualifiedName(name)); } @Override public GivenClassesConjunction dontHaveFullyQualifiedName(String name) { return givenWith(ClassesThatPredicates.dontHaveFullyQualifiedName(name)); } @Override public GivenClassesConjunction haveSimpleName(String name) { return givenWith(ClassesThatPredicates.haveSimpleName(name)); } @Override public GivenClassesConjunction dontHaveSimpleName(String name) { return givenWith(ClassesThatPredicates.dontHaveSimpleName(name)); } @Override public GivenClassesConjunction haveModifier(JavaModifier modifier) { return givenWith(ClassesThatPredicates.haveModifier(modifier)); } @Override public GivenClassesConjunction dontHaveModifier(JavaModifier modifier) { return givenWith(ClassesThatPredicates.dontHaveModifier(modifier)); } private GivenClassesInternal givenWith(DescribedPredicate<? super JavaClass> predicate) { return givenClasses.with(currentPredicate.add(predicate)); } }