in geronimo-metrics/src/main/java/org/apache/geronimo/microprofile/metrics/cdi/MetricsExtension.java [166:214]
void onMetric(@Observes final ProcessInjectionPoint<?, ?> metricInjectionPointProcessEvent) {
final InjectionPoint injectionPoint = metricInjectionPointProcessEvent.getInjectionPoint();
final Class<?> clazz = findClass(injectionPoint.getType());
if (clazz == null || !Metric.class.isAssignableFrom(clazz)) {
return;
}
final Annotated annotated = injectionPoint.getAnnotated();
final org.eclipse.microprofile.metrics.annotation.Metric config = annotated.getAnnotation(
org.eclipse.microprofile.metrics.annotation.Metric.class);
final MetricType type = findType(clazz);
if (config != null) {
final String name = Names.findName(injectionPoint.getMember().getDeclaringClass(), injectionPoint.getMember(),
of(config.name()).filter(it -> !it.isEmpty()).orElseGet(injectionPoint.getMember()::getName), config.absolute(),
"");
final Metadata metadata = Metadata.builder()
.withName(name)
.withDisplayName(config.displayName())
.withDescription(config.description())
.withType(type)
.withUnit(config.unit())
.build();
final MetricID id = new MetricID(name, createTags(config.tags()));
addRegistration(metadata, id);
if (!name.equals(config.name())) {
final Annotation[] newQualifiers = Stream.concat(metricInjectionPointProcessEvent.getInjectionPoint().getQualifiers().stream()
.filter(it -> it.annotationType() != org.eclipse.microprofile.metrics.annotation.Metric.class),
Stream.of(new MetricImpl(metadata, id)))
.toArray(Annotation[]::new);
metricInjectionPointProcessEvent.configureInjectionPoint()
.qualifiers(newQualifiers);
}
} else {
final String name = MetricRegistry.name(injectionPoint.getMember().getDeclaringClass(), injectionPoint.getMember().getName());
final Metadata metadata = Metadata.builder().withName(name).withType(type).build();
final MetricID metricID = new MetricID(name);
addRegistration(metadata, metricID);
// ensure the injection uses the qualifier since we'll not register it without
final Annotation[] newQualifiers = Stream.concat(metricInjectionPointProcessEvent.getInjectionPoint().getQualifiers().stream()
.filter(it -> it.annotationType() != Default.class),
Stream.of(new MetricImpl(metadata, metricID)))
.toArray(Annotation[]::new);
metricInjectionPointProcessEvent.configureInjectionPoint()
.qualifiers(newQualifiers);
}
}