test_class.file: agent/core/src/test/java/org/glowroot/agent/impl/TimerNameCacheTest.java
test_class.identifier: TimerNameCacheTest
test_case.body: @Test
      public void testNormal() {
          // given
          TimerNameCache timerNameCache = new TimerNameCache();
          // when
          TimerName timerName = timerNameCache.getTimerName(C.class);
          // then
          assertThat(((TimerNameImpl) timerName).name()).isEqualTo("z");
      }
test_case.class_method_signature: TimerNameCacheTest.testNormal()
test_case.full_signature: @Test public void testNormal()
test_case.identifier: testNormal
test_case.invocations: getTimerName isEqualTo assertThat name
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testNormal()
focal_class.declarator: AUXILIARY_THREAD_ROOT_TIMER_NAME = "auxiliary thread"
focal_class.modifier: public static final
focal_class.original_string: public static final String AUXILIARY_THREAD_ROOT_TIMER_NAME = "auxiliary thread";
focal_class.type: String
focal_class.var_name: AUXILIARY_THREAD_ROOT_TIMER_NAME
focal_class.declarator: logger = LoggerFactory.getLogger(TimerNameCache.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = LoggerFactory.getLogger(TimerNameCache.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: names = CacheBuilder.newBuilder()
              .weakValues()
              .build(new CacheLoader<String, TimerNameImpl>() {
                  @Override
                  public TimerNameImpl load(String name) {
                      return ImmutableTimerNameImpl.of(name, false);
                  }
              })
focal_class.modifier: private final
focal_class.original_string: private final LoadingCache<String, TimerNameImpl> names = CacheBuilder.newBuilder()
              .weakValues()
              .build(new CacheLoader<String, TimerNameImpl>() {
                  @Override
                  public TimerNameImpl load(String name) {
                      return ImmutableTimerNameImpl.of(name, false);
                  }
              });
focal_class.type: LoadingCache<String, TimerNameImpl>
focal_class.var_name: names
focal_class.declarator: unknownTimerName = names.getUnchecked("unknown")
focal_class.modifier: private final
focal_class.original_string: private final TimerName unknownTimerName = names.getUnchecked("unknown");
focal_class.type: TimerName
focal_class.var_name: unknownTimerName
focal_class.declarator: auxThreadTimerName =
              names.getUnchecked(AUXILIARY_THREAD_ROOT_TIMER_NAME)
focal_class.modifier: private final
focal_class.original_string: private final TimerName auxThreadTimerName =
              names.getUnchecked(AUXILIARY_THREAD_ROOT_TIMER_NAME);
focal_class.type: TimerName
focal_class.var_name: auxThreadTimerName
focal_class.file: agent/core/src/main/java/org/glowroot/agent/impl/TimerNameCache.java
focal_class.identifier: TimerNameCache
focal_class.class_method_signature: TimerNameCache.getTimerName(Class<?> adviceClass)
focal_class.full_signature: public TimerName getTimerName(Class<?> adviceClass)
focal_class.identifier: getTimerName
focal_class.modifiers: public
focal_class.parameters: (Class<?> adviceClass)
focal_class.return: TimerName
focal_class.signature: TimerName getTimerName(Class<?> adviceClass)
focal_class.class_method_signature: TimerNameCache.getTimerName(String name)
focal_class.full_signature:  TimerName getTimerName(String name)
focal_class.identifier: getTimerName
focal_class.parameters: (String name)
focal_class.return: TimerName
focal_class.signature: TimerName getTimerName(String name)
focal_class.class_method_signature: TimerNameCache.getAuxThreadTimerName()
focal_class.full_signature:  TimerName getAuxThreadTimerName()
focal_class.identifier: getAuxThreadTimerName
focal_class.parameters: ()
focal_class.return: TimerName
focal_class.signature: TimerName getAuxThreadTimerName()
focal_class.class_method_signature: TimerNameCache.getName(String name)
focal_class.full_signature: private TimerName getName(String name)
focal_class.identifier: getName
focal_class.modifiers: private
focal_class.parameters: (String name)
focal_class.return: TimerName
focal_class.signature: TimerName getName(String name)
focal_method.body: public TimerName getTimerName(Class<?> adviceClass) {
          if (adviceClass == null) {
              logger.error("getTimerName(): argument 'adviceClass' must be non-null");
              return unknownTimerName;
          }
          Pointcut pointcut = adviceClass.getAnnotation(Pointcut.class);
          if (pointcut == null) {
              logger.warn("advice has no @Pointcut: {}", adviceClass.getName());
              return unknownTimerName;
          } else if (pointcut.timerName().isEmpty()) {
              logger.warn("advice @Pointcut has no timerName() attribute: {}", adviceClass.getName());
              return unknownTimerName;
          } else {
              return getName(pointcut.timerName());
          }
      }
focal_method.class_method_signature: TimerNameCache.getTimerName(Class<?> adviceClass)
focal_method.full_signature: public TimerName getTimerName(Class<?> adviceClass)
focal_method.identifier: getTimerName
focal_method.invocations: error getAnnotation warn getName isEmpty timerName warn getName getName timerName
focal_method.modifiers: public
focal_method.parameters: (Class<?> adviceClass)
focal_method.return: TimerName
focal_method.signature: TimerName getTimerName(Class<?> adviceClass)