org_apache_dubbo_spring_boot_actuate_health_DubboHealthIndicatorTest_java
org.springframework.core.annotation.AnnotatedElementUtils
private static <T> T searchWithFindSemantics(AnnotatedElement element, Class<? extends Annotation> annotationType, String annotationName, Class<? extends Annotation> containerType, Processor<T> processor, Set<AnnotatedElement> visited, int metaDepth) {
        block21: {
            Assert.notNull((Object)element, "AnnotatedElement must not be null");
            if (visited.add(element)) {
                try {
                    Annotation[] annotations = element.getDeclaredAnnotations();
                    if (annotations.length > 0) {
                        Object result;
                        Class<? extends Annotation> currentAnnotationType;
                        ArrayList<T> aggregatedResults = processor.aggregates() ? new ArrayList<T>() : null;
                        for (Annotation annotation : annotations) {
                            currentAnnotationType = annotation.annotationType();
                            if (AnnotationUtils.isInJavaLangAnnotationPackage(currentAnnotationType)) continue;
                            if (currentAnnotationType == annotationType || currentAnnotationType.getName().equals(annotationName) || processor.alwaysProcesses()) {
                                result = processor.process(element, annotation, metaDepth);
                                if (result == null) continue;
                                if (aggregatedResults != null && metaDepth == 0) {
                                    aggregatedResults.add(result);
                                    continue;
                                }
                                return result;
                            }
                            if (currentAnnotationType != containerType) continue;
                            result = AnnotatedElementUtils.getRawAnnotationsFromContainer((AnnotatedElement)element, (Annotation)annotation);
                            int n = ((T)result).length;
                            for (int i = 0; i < n; ++i) {
                                T contained = result[i];
                                T result2 = processor.process(element, (Annotation)contained, metaDepth);
                                if (aggregatedResults == null || result2 == null) continue;
                                aggregatedResults.add(result2);
                            }
                        }
                        Annotation[] annotationArray = annotations;
                        int n = annotationArray.length;
                        for (int i = 0; i < n; ++i) {
                            Annotation annotation;
                            annotation = annotationArray[i];
                            currentAnnotationType = annotation.annotationType();
                            if (AnnotationUtils.isInJavaLangAnnotationPackage(currentAnnotationType) || (result = AnnotatedElementUtils.searchWithFindSemantics(currentAnnotationType, annotationType, annotationName, containerType, processor, visited, metaDepth + 1)) == null) continue;
                            processor.postProcess(currentAnnotationType, annotation, result);
                            if (aggregatedResults != null && metaDepth == 0) {
                                aggregatedResults.add(result);
                                continue;
                            }
                            return result;
                        }
                        if (!CollectionUtils.isEmpty(aggregatedResults)) {
                            processor.getAggregatedResults().addAll(0, aggregatedResults);
                        }
                    }
                    if (element instanceof Method) {
                        T t;
                        T t2;
                        Method method = (Method)element;
                        Method resolvedMethod = BridgeMethodResolver.findBridgedMethod(method);
                        if (resolvedMethod != method && (t2 = AnnotatedElementUtils.searchWithFindSemantics(resolvedMethod, annotationType, annotationName, containerType, processor, visited, metaDepth)) != null) {
                            return t2;
                        }
                        Class<?>[] ifcs = method.getDeclaringClass().getInterfaces();
                        if (ifcs.length > 0 && (t = AnnotatedElementUtils.searchOnInterfaces(method, annotationType, annotationName, containerType, processor, visited, metaDepth, ifcs)) != null) {
                            return t;
                        }
                        Class<?> clazz = method.getDeclaringClass();
                        while ((clazz = clazz.getSuperclass()) != null && Object.class != clazz) {
                            T t3;
                            try {
                                Method equivalentMethod = clazz.getDeclaredMethod(method.getName(), method.getParameterTypes());
                                Method resolvedEquivalentMethod = BridgeMethodResolver.findBridgedMethod(equivalentMethod);
                                T t4 = AnnotatedElementUtils.searchWithFindSemantics(resolvedEquivalentMethod, annotationType, annotationName, containerType, processor, visited, metaDepth);
                                if (t4 != null) {
                                    return t4;
                                }
                            }
                            catch (NoSuchMethodException equivalentMethod) {
                                // empty catch block
                            }
                            if ((t3 = AnnotatedElementUtils.searchOnInterfaces(method, annotationType, annotationName, containerType, processor, visited, metaDepth, clazz.getInterfaces())) == null) continue;
                            return t3;
                        }
                        break block21;
                    }
                    if (element instanceof Class) {
                        T result;
                        Class clazz = (Class)element;
                        for (Class<?> ifc : clazz.getInterfaces()) {
                            T result3 = AnnotatedElementUtils.searchWithFindSemantics(ifc, annotationType, annotationName, containerType, processor, visited, metaDepth);
                            if (result3 == null) continue;
                            return result3;
                        }
                        Class clazz2 = clazz.getSuperclass();
                        if (clazz2 != null && Object.class != clazz2 && (result = AnnotatedElementUtils.searchWithFindSemantics(clazz2, annotationType, annotationName, containerType, processor, visited, metaDepth)) != null) {
                            return result;
                        }
                    }
                }
                catch (Throwable ex) {
                    AnnotationUtils.handleIntrospectionFailure(element, ex);
                }
            }
        }
        return null;
    }
 -> java.util.Set.add(java.lang.Object): boolean -> java.lang.reflect.AnnotatedElement.getDeclaredAnnotations(): java.lang.annotation.Annotation[] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.annotation.Annotation.annotationType(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.Object.hashCode(): int -> java.lang.ref.ReferenceQueue.poll(): java.lang.ref.Reference -> java.lang.ref.SoftReference.get(): java.lang.Object -> java.lang.ref.SoftReference.get(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object -> java.lang.reflect.Method.getDefaultValue(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [EXIT] -> java.util.Set.add(java.lang.Object): boolean -> java.lang.reflect.AnnotatedElement.getDeclaredAnnotations(): java.lang.annotation.Annotation[] [CALL] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] -> java.lang.annotation.Annotation.annotationType(): java.lang.Class [CALL] [CALL] [EXIT] -> java.lang.Class.getName(): java.lang.String [EXIT] [CALL] -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [CALL] [CALL] [CALL] -> java.lang.Object.hashCode(): int [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.lang.ref.ReferenceQueue.poll(): java.lang.ref.Reference [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] -> java.lang.ref.SoftReference.get(): java.lang.Object [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.ref.SoftReference.get(): java.lang.Object [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object -> java.lang.reflect.Method.getDefaultValue(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] [EXIT] [EXIT] [EXIT]