test_class.declarator: treeProvider = new TreeProviderService()
test_class.modifier: private final
test_class.original_string: private final TreeProvider treeProvider = new TreeProviderService();
test_class.type: TreeProvider
test_class.var_name: treeProvider
test_class.declarator: whiteboard = new DefaultWhiteboard()
test_class.modifier: private final
test_class.original_string: private final Whiteboard whiteboard = new DefaultWhiteboard();
test_class.type: Whiteboard
test_class.var_name: whiteboard
test_class.declarator: clock = new Clock.Virtual()
test_class.modifier: private final
test_class.original_string: private final Clock clock = new Clock.Virtual();
test_class.type: Clock
test_class.var_name: clock
test_class.declarator: numMessages = new AtomicLong()
test_class.modifier: private final
test_class.original_string: private final AtomicLong numMessages = new AtomicLong();
test_class.type: AtomicLong
test_class.var_name: numMessages
test_class.declarator: logger = new FrozenNodeLogger(clock, whiteboard) {
          @Override
          protected void logFrozenNode(Tree tree) {
              numMessages.incrementAndGet();
              super.logFrozenNode(tree);
          }
      }
test_class.modifier: private final
test_class.original_string: private final FrozenNodeLogger logger = new FrozenNodeLogger(clock, whiteboard) {
          @Override
          protected void logFrozenNode(Tree tree) {
              numMessages.incrementAndGet();
              super.logFrozenNode(tree);
          }
      };
test_class.type: FrozenNodeLogger
test_class.var_name: logger
test_class.declarator: emptyTree = treeProvider.createReadOnlyTree(EmptyNodeState.EMPTY_NODE)
test_class.modifier: private final
test_class.original_string: private final Tree emptyTree = treeProvider.createReadOnlyTree(EmptyNodeState.EMPTY_NODE);
test_class.type: Tree
test_class.var_name: emptyTree
test_class.declarator: folderTree = treeProvider.createReadOnlyTree(
              new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE)
                      .setProperty(JCR_PRIMARYTYPE, NT_FOLDER, Type.NAME)
                      .getNodeState()
      )
test_class.modifier: private final
test_class.original_string: private final Tree folderTree = treeProvider.createReadOnlyTree(
              new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE)
                      .setProperty(JCR_PRIMARYTYPE, NT_FOLDER, Type.NAME)
                      .getNodeState()
      );
test_class.type: Tree
test_class.var_name: folderTree
test_class.declarator: frozenNodeTree = treeProvider.createReadOnlyTree(
              new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE)
                      .setProperty(JCR_PRIMARYTYPE, NT_FROZENNODE, Type.NAME)
                      .getNodeState()
      )
test_class.modifier: private final
test_class.original_string: private final Tree frozenNodeTree = treeProvider.createReadOnlyTree(
              new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE)
                      .setProperty(JCR_PRIMARYTYPE, NT_FROZENNODE, Type.NAME)
                      .getNodeState()
      );
test_class.type: Tree
test_class.var_name: frozenNodeTree
test_class.file: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/FrozenNodeLoggerTest.java
test_class.identifier: FrozenNodeLoggerTest
test_case.body: @Test
      public void emptyNode() {
          assertMessages(() -> { logger.lookupById(emptyTree); return 0; });
      }
test_case.class_method_signature: FrozenNodeLoggerTest.emptyNode()
test_case.full_signature: @Test public void emptyNode()
test_case.identifier: emptyNode
test_case.invocations: assertMessages lookupById
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void emptyNode()
focal_class.declarator: log = LoggerFactory.getLogger(FrozenNodeLogger.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger log = LoggerFactory.getLogger(FrozenNodeLogger.class);
focal_class.type: Logger
focal_class.var_name: log
focal_class.declarator: LOG_INTERVAL = Long.getLong("oak.frozenNodeLogger.minInterval", 1000)
focal_class.modifier: private static final
focal_class.original_string: private static final long LOG_INTERVAL = Long.getLong("oak.frozenNodeLogger.minInterval", 1000);
focal_class.type: long
focal_class.var_name: LOG_INTERVAL
focal_class.declarator: NO_MESSAGE_UNTIL = 0
focal_class.modifier: private static
focal_class.original_string: private static long NO_MESSAGE_UNTIL = 0;
focal_class.type: long
focal_class.var_name: NO_MESSAGE_UNTIL
focal_class.declarator: clock
focal_class.modifier: private final
focal_class.original_string: private final Clock clock;
focal_class.type: Clock
focal_class.var_name: clock
focal_class.declarator: feature
focal_class.modifier: private final
focal_class.original_string: private final Feature feature;
focal_class.type: Feature
focal_class.var_name: feature
focal_class.file: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/FrozenNodeLogger.java
focal_class.identifier: FrozenNodeLogger
focal_class.interfaces: implements Closeable
focal_class.class_method_signature: FrozenNodeLogger.FrozenNodeLogger(@NotNull Clock clock,
                              @NotNull Whiteboard whiteboard)
focal_class.full_signature: public  FrozenNodeLogger(@NotNull Clock clock,
                              @NotNull Whiteboard whiteboard)
focal_class.identifier: FrozenNodeLogger
focal_class.modifiers: public
focal_class.parameters: (@NotNull Clock clock,
                              @NotNull Whiteboard whiteboard)
focal_class.signature:  FrozenNodeLogger(@NotNull Clock clock,
                              @NotNull Whiteboard whiteboard)
focal_class.class_method_signature: FrozenNodeLogger.lookupById(@NotNull Tree tree)
focal_class.full_signature: public final void lookupById(@NotNull Tree tree)
focal_class.identifier: lookupById
focal_class.modifiers: public final
focal_class.parameters: (@NotNull Tree tree)
focal_class.return: void
focal_class.signature: void lookupById(@NotNull Tree tree)
focal_class.class_method_signature: FrozenNodeLogger.close()
focal_class.full_signature: @Override public void close()
focal_class.identifier: close
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void close()
focal_class.class_method_signature: FrozenNodeLogger.logFrozenNode(Tree tree)
focal_class.full_signature: protected void logFrozenNode(Tree tree)
focal_class.identifier: logFrozenNode
focal_class.modifiers: protected
focal_class.parameters: (Tree tree)
focal_class.return: void
focal_class.signature: void logFrozenNode(Tree tree)
focal_method.body: public final void lookupById(@NotNull Tree tree) {
          if (!feature.isEnabled()) {
              return;
          }
          PropertyState primaryType = tree.getProperty(JCR_PRIMARYTYPE);
          if (primaryType != null
                  && !primaryType.isArray()
                  && primaryType.getValue(Type.STRING).equals(NT_FROZENNODE)) {
              long now = clock.getTime();
              synchronized (FrozenNodeLogger.class) {
                  if (now >= NO_MESSAGE_UNTIL) {
                      NO_MESSAGE_UNTIL = now + LOG_INTERVAL;
                      logFrozenNode(tree);
                  }
              }
          }
      }
focal_method.class_method_signature: FrozenNodeLogger.lookupById(@NotNull Tree tree)
focal_method.full_signature: public final void lookupById(@NotNull Tree tree)
focal_method.identifier: lookupById
focal_method.invocations: isEnabled getProperty isArray equals getValue getTime logFrozenNode
focal_method.modifiers: public final
focal_method.parameters: (@NotNull Tree tree)
focal_method.return: void
focal_method.signature: void lookupById(@NotNull Tree tree)