Adopt to Gerrit Core 3.3.x

Switch source and target to Java 11 to match Gerrit 3.3.x build
requirements. Reuse DelegateRepository to avoid code duplication.
Bump version to 3.3.0-rc0

Also bump  maven-javadoc-plugin to version 3.2.0.

Feature: Issue 13429
Change-Id: I60e840657f88eb1978849f3e58b82f93f06a2538
diff --git a/Jenkinsfile b/Jenkinsfile
index a090baf..deb1d46 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -19,7 +19,7 @@
         stage('build') {
             steps {
                 gerritReview labels: [Verified: 0], message: "Build started: ${env.BUILD_URL}"
-                sh 'mvn test'
+                sh "bash -c '. set-java.sh 11 && mvn test'"
             }
         }
     }
diff --git a/pom.xml b/pom.xml
index 844c33c..c67aee8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>com.gerritforge</groupId>
     <artifactId>global-refdb</artifactId>
-    <version>3.2.0-rc0</version>
+    <version>3.3.0-rc1</version>
     <packaging>jar</packaging>
 
     <name>global-refdb</name>
@@ -38,7 +38,7 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <gerrit.version>3.2.3</gerrit.version>
+        <gerrit.version>3.3.0-rc1</gerrit.version>
     </properties>
 
     <dependencies>
@@ -75,8 +75,8 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.6.1</version>
                 <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
+                    <source>11</source>
+                    <target>11</target>
                 </configuration>
             </plugin>
             <plugin>
@@ -95,7 +95,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-javadoc-plugin</artifactId>
-                <version>3.1.1</version>
+                <version>3.2.0</version>
                 <executions>
                     <execution>
                         <id>attach-javadocs</id>
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java
index 8758a14..cdb65da 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepository.java
@@ -14,48 +14,17 @@
 
 package com.gerritforge.gerrit.globalrefdb.validation;
 
+import com.google.gerrit.server.git.DelegateRepository;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
-import java.io.File;
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.eclipse.jgit.attributes.AttributesNodeProvider;
-import org.eclipse.jgit.dircache.DirCache;
-import org.eclipse.jgit.errors.AmbiguousObjectException;
-import org.eclipse.jgit.errors.CorruptObjectException;
-import org.eclipse.jgit.errors.IncorrectObjectTypeException;
-import org.eclipse.jgit.errors.MissingObjectException;
-import org.eclipse.jgit.errors.NoWorkTreeException;
-import org.eclipse.jgit.errors.RevisionSyntaxException;
-import org.eclipse.jgit.events.ListenerList;
-import org.eclipse.jgit.events.RepositoryEvent;
-import org.eclipse.jgit.lib.AnyObjectId;
-import org.eclipse.jgit.lib.BaseRepositoryBuilder;
-import org.eclipse.jgit.lib.ObjectDatabase;
-import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.lib.ObjectInserter;
-import org.eclipse.jgit.lib.ObjectLoader;
-import org.eclipse.jgit.lib.ObjectReader;
-import org.eclipse.jgit.lib.ProgressMonitor;
-import org.eclipse.jgit.lib.RebaseTodoLine;
-import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.RefDatabase;
-import org.eclipse.jgit.lib.RefRename;
 import org.eclipse.jgit.lib.RefUpdate;
-import org.eclipse.jgit.lib.ReflogReader;
 import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.lib.RepositoryState;
-import org.eclipse.jgit.lib.StoredConfig;
-import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.util.FS;
 
-public class SharedRefDbRepository extends Repository {
+public class SharedRefDbRepository extends DelegateRepository {
 
-  private final Repository repository;
-  private final RefDatabase refDatabase;
-  private final SharedRefDbRefDatabase sharedRefDbRefDatabase;
+  private final SharedRefDbRefDatabase sharedRefDatabase;
 
   public interface Factory {
     public SharedRefDbRepository create(String projectName, Repository repository);
@@ -63,345 +32,25 @@
 
   @Inject
   public SharedRefDbRepository(
-      SharedRefDbRefDatabase.Factory sharedRefDbRefDbFactory,
+      SharedRefDbRefDatabase.Factory refDbFactory,
       @Assisted String projectName,
       @Assisted Repository repository) {
-    super(new BaseRepositoryBuilder());
-    this.repository = repository;
-    this.refDatabase = repository.getRefDatabase();
-    this.sharedRefDbRefDatabase = sharedRefDbRefDbFactory.create(projectName, refDatabase);
-  }
-
-  @Override
-  public void create(boolean b) throws IOException {}
-
-  @Override
-  public ObjectDatabase getObjectDatabase() {
-    return repository.getObjectDatabase();
+    super(repository);
+    this.sharedRefDatabase = refDbFactory.create(projectName, repository.getRefDatabase());
   }
 
   @Override
   public RefDatabase getRefDatabase() {
-    return sharedRefDbRefDatabase;
-  }
-
-  @Override
-  public StoredConfig getConfig() {
-    return repository.getConfig();
-  }
-
-  @Override
-  public AttributesNodeProvider createAttributesNodeProvider() {
-    return repository.createAttributesNodeProvider();
-  }
-
-  @Override
-  public void scanForRepoChanges() throws IOException {
-    repository.scanForRepoChanges();
-  }
-
-  @Override
-  public void notifyIndexChanged(boolean b) {
-    repository.notifyIndexChanged(b);
-  }
-
-  @Override
-  public ReflogReader getReflogReader(String s) throws IOException {
-    return repository.getReflogReader(s);
-  }
-
-  @Override
-  public int hashCode() {
-    return repository.hashCode();
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    return repository.equals(obj);
-  }
-
-  @Override
-  public ListenerList getListenerList() {
-    return repository.getListenerList();
-  }
-
-  @Override
-  public void fireEvent(RepositoryEvent<?> event) {
-    repository.fireEvent(event);
-  }
-
-  @Override
-  public void create() throws IOException {
-    repository.create();
-  }
-
-  @Override
-  public File getDirectory() {
-    return repository.getDirectory();
-  }
-
-  @Override
-  public ObjectInserter newObjectInserter() {
-    return repository.newObjectInserter();
-  }
-
-  @Override
-  public ObjectReader newObjectReader() {
-    return repository.newObjectReader();
-  }
-
-  @Override
-  public FS getFS() {
-    return repository.getFS();
-  }
-
-  @SuppressWarnings("deprecation")
-  @Override
-  public boolean hasObject(AnyObjectId objectId) {
-    return repository.hasObject(objectId);
-  }
-
-  @Override
-  public ObjectLoader open(AnyObjectId objectId) throws MissingObjectException, IOException {
-    return repository.open(objectId);
-  }
-
-  @Override
-  public ObjectLoader open(AnyObjectId objectId, int typeHint)
-      throws MissingObjectException, IncorrectObjectTypeException, IOException {
-    return repository.open(objectId, typeHint);
+    return sharedRefDatabase;
   }
 
   @Override
   public RefUpdate updateRef(String ref) throws IOException {
-    return sharedRefDbRefDatabase.wrapRefUpdate(repository.updateRef(ref));
+    return sharedRefDatabase.wrapRefUpdate(delegate.updateRef(ref));
   }
 
   @Override
   public RefUpdate updateRef(String ref, boolean detach) throws IOException {
-    return sharedRefDbRefDatabase.wrapRefUpdate(repository.updateRef(ref, detach));
-  }
-
-  @Override
-  public RefRename renameRef(String fromRef, String toRef) throws IOException {
-    return repository.renameRef(fromRef, toRef);
-  }
-
-  @Override
-  public ObjectId resolve(String revstr)
-      throws AmbiguousObjectException, IncorrectObjectTypeException, RevisionSyntaxException,
-          IOException {
-    return repository.resolve(revstr);
-  }
-
-  @Override
-  public String simplify(String revstr) throws AmbiguousObjectException, IOException {
-    return repository.simplify(revstr);
-  }
-
-  @Override
-  public void incrementOpen() {
-    repository.incrementOpen();
-  }
-
-  @Override
-  public void close() {
-    repository.close();
-  }
-
-  @Override
-  public String toString() {
-    return repository.toString();
-  }
-
-  @Override
-  public String getFullBranch() throws IOException {
-    return repository.getFullBranch();
-  }
-
-  @Override
-  public String getBranch() throws IOException {
-    return repository.getBranch();
-  }
-
-  @Override
-  public Set<ObjectId> getAdditionalHaves() {
-    return repository.getAdditionalHaves();
-  }
-
-  @SuppressWarnings("deprecation")
-  @Override
-  public Map<String, Ref> getAllRefs() {
-    return repository.getAllRefs();
-  }
-
-  @SuppressWarnings("deprecation")
-  @Override
-  public Map<String, Ref> getTags() {
-    return repository.getTags();
-  }
-
-  @SuppressWarnings("deprecation")
-  @Override
-  public Ref peel(Ref ref) {
-    return repository.peel(ref);
-  }
-
-  @Override
-  public Map<AnyObjectId, Set<Ref>> getAllRefsByPeeledObjectId() {
-    return repository.getAllRefsByPeeledObjectId();
-  }
-
-  @Override
-  public File getIndexFile() throws NoWorkTreeException {
-    return repository.getIndexFile();
-  }
-
-  @Override
-  public RevCommit parseCommit(AnyObjectId id)
-      throws IncorrectObjectTypeException, IOException, MissingObjectException {
-    return repository.parseCommit(id);
-  }
-
-  @Override
-  public DirCache readDirCache() throws NoWorkTreeException, CorruptObjectException, IOException {
-    return repository.readDirCache();
-  }
-
-  @Override
-  public DirCache lockDirCache() throws NoWorkTreeException, CorruptObjectException, IOException {
-    return repository.lockDirCache();
-  }
-
-  @Override
-  public RepositoryState getRepositoryState() {
-    return repository.getRepositoryState();
-  }
-
-  @Override
-  public boolean isBare() {
-    return repository.isBare();
-  }
-
-  @Override
-  public File getWorkTree() throws NoWorkTreeException {
-    return repository.getWorkTree();
-  }
-
-  @Override
-  public String shortenRemoteBranchName(String refName) {
-    return repository.shortenRemoteBranchName(refName);
-  }
-
-  @Override
-  public String getRemoteName(String refName) {
-    return repository.getRemoteName(refName);
-  }
-
-  @Override
-  public String getGitwebDescription() throws IOException {
-    return repository.getGitwebDescription();
-  }
-
-  @Override
-  public void setGitwebDescription(String description) throws IOException {
-    repository.setGitwebDescription(description);
-  }
-
-  @Override
-  public String readMergeCommitMsg() throws IOException, NoWorkTreeException {
-    return repository.readMergeCommitMsg();
-  }
-
-  @Override
-  public void writeMergeCommitMsg(String msg) throws IOException {
-    repository.writeMergeCommitMsg(msg);
-  }
-
-  @Override
-  public String readCommitEditMsg() throws IOException, NoWorkTreeException {
-    return repository.readCommitEditMsg();
-  }
-
-  @Override
-  public void writeCommitEditMsg(String msg) throws IOException {
-    repository.writeCommitEditMsg(msg);
-  }
-
-  @Override
-  public List<ObjectId> readMergeHeads() throws IOException, NoWorkTreeException {
-    return repository.readMergeHeads();
-  }
-
-  @Override
-  public void writeMergeHeads(List<? extends ObjectId> heads) throws IOException {
-    repository.writeMergeHeads(heads);
-  }
-
-  @Override
-  public ObjectId readCherryPickHead() throws IOException, NoWorkTreeException {
-    return repository.readCherryPickHead();
-  }
-
-  @Override
-  public ObjectId readRevertHead() throws IOException, NoWorkTreeException {
-    return repository.readRevertHead();
-  }
-
-  @Override
-  public void writeCherryPickHead(ObjectId head) throws IOException {
-    repository.writeCherryPickHead(head);
-  }
-
-  @Override
-  public void writeRevertHead(ObjectId head) throws IOException {
-    repository.writeRevertHead(head);
-  }
-
-  @Override
-  public void writeOrigHead(ObjectId head) throws IOException {
-    repository.writeOrigHead(head);
-  }
-
-  @Override
-  public ObjectId readOrigHead() throws IOException, NoWorkTreeException {
-    return repository.readOrigHead();
-  }
-
-  @Override
-  public String readSquashCommitMsg() throws IOException {
-    return repository.readSquashCommitMsg();
-  }
-
-  @Override
-  public void writeSquashCommitMsg(String msg) throws IOException {
-    repository.writeSquashCommitMsg(msg);
-  }
-
-  @Override
-  public List<RebaseTodoLine> readRebaseTodo(String path, boolean includeComments)
-      throws IOException {
-    return repository.readRebaseTodo(path, includeComments);
-  }
-
-  @Override
-  public void writeRebaseTodoFile(String path, List<RebaseTodoLine> steps, boolean append)
-      throws IOException {
-    repository.writeRebaseTodoFile(path, steps, append);
-  }
-
-  @Override
-  public Set<String> getRemoteNames() {
-    return repository.getRemoteNames();
-  }
-
-  @Override
-  public void autoGC(ProgressMonitor monitor) {
-    repository.autoGC(monitor);
-  }
-
-  @Override
-  public String getIdentifier() {
-    return repository.getIdentifier();
+    return sharedRefDatabase.wrapRefUpdate(delegate.updateRef(ref, detach));
   }
 }
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java
index 7cb4c83..5bb4fb4 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRepositoryTest.java
@@ -20,6 +20,7 @@
 
 import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
 import java.io.IOException;
+import org.eclipse.jgit.lib.ObjectDatabase;
 import org.eclipse.jgit.lib.RefDatabase;
 import org.eclipse.jgit.lib.RefUpdate.Result;
 import org.eclipse.jgit.lib.Repository;
@@ -34,6 +35,7 @@
   @Mock SharedRefDbRefDatabase.Factory sharedRefDbRefDbFactory;
   @Mock SharedRefDbRefDatabase sharedRefDb;
   @Mock RefDatabase genericRefDb;
+  @Mock ObjectDatabase objectDatabase;
 
   @Mock SharedRefDbRefUpdate sharedRefDbRefUpdate;
 
@@ -48,7 +50,9 @@
   }
 
   private void setMockitoCommon() {
+    doReturn(true).when(repository).isBare();
     doReturn(genericRefDb).when(repository).getRefDatabase();
+    doReturn(objectDatabase).when(repository).getObjectDatabase();
     doReturn(sharedRefDb).when(sharedRefDbRefDbFactory).create(PROJECT_NAME, genericRefDb);
   }