diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java
index edd1a0a..04f295d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java
@@ -242,20 +242,6 @@
     return findOwners(files.toArray(new String[0]), ownerWeights, logs);
   }
 
-  /** Returns true if path has '*' owner. */
-  private boolean findStarOwner(
-      String path, int distance, ArrayList<String> paths, ArrayList<Integer> distances) {
-    Set<String> owners = path2Owners.get(path);
-    if (owners != null) {
-      paths.add(path);
-      distances.add(distance);
-      if (owners.contains("*")) {
-        return true;
-      }
-    }
-    return false;
-  }
-
   /** Returns owner emails of every file and set up ownerWeights. */
   Map<String, Set<String>> findOwners(
       String[] files, Map<String, OwnerWeights> ownerWeights, List<String> logs) {
@@ -319,6 +305,20 @@
     return file2Owners;
   }
 
+  /** Returns true if path has '*' owner. */
+  private boolean findStarOwner(
+      String path, int distance, ArrayList<String> paths, ArrayList<Integer> distances) {
+    Set<String> owners = path2Owners.get(path);
+    if (owners != null) {
+      paths.add(path);
+      distances.add(distance);
+      if (owners.contains("*")) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   /** Returns ObjectId of the given branch, or null. */
   private static ObjectId getBranchId(
       Repository repo, String branch, ChangeData changeData, List<String> logs) {
