Leverage JGit 3.2 new Config.getNames() 

From JGit 3.2 it is possible now to get recursively
all the list of config names associated to a section
from both gerrit.config and secure.config merged
together.

There is no need anymore of composing them manually
through the CompositeConfig workaround.

Change-Id: Iefdad16c9c65591113adfc43dcc130c54345c6b6
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/CompositeConfig.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/CompositeConfig.java
deleted file mode 100644
index 76b4ce6..0000000
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/CompositeConfig.java
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright (C) 2014 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.googlesource.gerrit.plugins.github.oauth;
-
-import java.lang.reflect.Field;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.events.ConfigChangedListener;
-import org.eclipse.jgit.events.ListenerHandle;
-import org.eclipse.jgit.lib.Config;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-@Singleton
-public class CompositeConfig extends Config {
-  private final Config secureConfig;
-  private final Config gerritConfig;
-
-  @Inject
-  public CompositeConfig(@GerritServerConfig Config config) {
-    this.secureConfig = config;
-    try {
-      Field baseConfigField = Config.class.getDeclaredField("baseConfig");
-      baseConfigField.setAccessible(true);
-      this.gerritConfig = (Config) baseConfigField.get(config);
-    } catch (SecurityException|NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
-      throw new IllegalArgumentException("JGit baseConfig cannot be accessed from GerritServerConfig", e);
-    }
-  }
-
-  public ListenerHandle addChangeListener(ConfigChangedListener listener) {
-    return secureConfig.addChangeListener(listener);
-  }
-
-  public boolean equals(Object obj) {
-    return secureConfig.equals(obj);
-  }
-
-  public int getInt(String section, String name, int defaultValue) {
-    return secureConfig.getInt(section, name, defaultValue);
-  }
-
-  public int getInt(String section, String subsection, String name,
-      int defaultValue) {
-    return secureConfig.getInt(section, subsection, name, defaultValue);
-  }
-
-  public long getLong(String section, String name, long defaultValue) {
-    return secureConfig.getLong(section, name, defaultValue);
-  }
-
-  public long getLong(String section, String subsection, String name,
-      long defaultValue) {
-    return secureConfig.getLong(section, subsection, name, defaultValue);
-  }
-
-  public boolean getBoolean(String section, String name, boolean defaultValue) {
-    return secureConfig.getBoolean(section, name, defaultValue);
-  }
-
-  public boolean getBoolean(String section, String subsection, String name,
-      boolean defaultValue) {
-    return secureConfig.getBoolean(section, subsection, name, defaultValue);
-  }
-
-  public <T extends Enum<?>> T getEnum(String section, String subsection,
-      String name, T defaultValue) {
-    return secureConfig.getEnum(section, subsection, name, defaultValue);
-  }
-
-  public <T extends Enum<?>> T getEnum(T[] all, String section,
-      String subsection, String name, T defaultValue) {
-    return secureConfig.getEnum(all, section, subsection, name, defaultValue);
-  }
-
-  public Set<String> getNames(String section) {
-    return getNames(section, null);
-  }
-
-  public Set<String> getNames(String section, String subsection) {
-    return new ImmutableSet.Builder<String>()
-        .addAll(secureConfig.getNames(section, subsection))
-        .addAll(gerritConfig.getNames(section, subsection))
-        .build();
-  }
-
-  public <T> T get(SectionParser<T> parser) {
-    return secureConfig.get(parser);
-  }
-
-  public void fromText(String text) throws ConfigInvalidException {
-    secureConfig.fromText(text);
-  }
-
-  public Set<String> getNames(String section, boolean recursive) {
-    return secureConfig.getNames(section, recursive);
-  }
-
-  public Set<String> getNames(String section, String subsection,
-      boolean recursive) {
-    return secureConfig.getNames(section, subsection, recursive);
-  }
-
-  public String getString(String section, String subsection, String name) {
-    return secureConfig.getString(section, subsection, name);
-  }
-
-  public String[] getStringList(String section, String subsection, String name) {
-    return secureConfig.getStringList(section, subsection, name);
-  }
-
-  public Set<String> getSubsections(String section) {
-    return secureConfig.getSubsections(section);
-  }
-
-  public Set<String> getSections() {
-    return secureConfig.getSections();
-  }
-
-  public int hashCode() {
-    return secureConfig.hashCode();
-  }
-
-  public void uncache(SectionParser<?> parser) {
-    secureConfig.uncache(parser);
-  }
-
-  public void setInt(String section, String subsection, String name, int value) {
-    secureConfig.setInt(section, subsection, name, value);
-  }
-
-  public void setLong(String section, String subsection, String name, long value) {
-    secureConfig.setLong(section, subsection, name, value);
-  }
-
-  public void setBoolean(String section, String subsection, String name,
-      boolean value) {
-    secureConfig.setBoolean(section, subsection, name, value);
-  }
-
-  public <T extends Enum<?>> void setEnum(String section, String subsection,
-      String name, T value) {
-    secureConfig.setEnum(section, subsection, name, value);
-  }
-
-  public void setString(String section, String subsection, String name,
-      String value) {
-    secureConfig.setString(section, subsection, name, value);
-  }
-
-  public void unset(String section, String subsection, String name) {
-    secureConfig.unset(section, subsection, name);
-  }
-
-  public void setStringList(String section, String subsection, String name,
-      List<String> values) {
-    secureConfig.setStringList(section, subsection, name, values);
-  }
-
-  public String toString() {
-    return secureConfig.toString();
-  }
-
-  public void unsetSection(String section, String subsection) {
-    secureConfig.unsetSection(section, subsection);
-  }
-
-  public String toText() {
-    return secureConfig.toText();
-  }
-}
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
index 0a07ec1..5a5f91f 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
@@ -20,10 +20,13 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.eclipse.jgit.lib.Config;
+
 import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 import com.google.gerrit.reviewdb.client.AuthType;
+import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.github.oauth.OAuthProtocol.Scope;
@@ -51,10 +54,10 @@
   public final Map<String, List<OAuthProtocol.Scope>> scopes;
   public final int fileUpdateMaxRetryCount;
   public final int fileUpdateMaxRetryIntervalMsec;
-  public final CompositeConfig gerritConfig;
+  public final Config gerritConfig;
 
   @Inject
-  public GitHubOAuthConfig(CompositeConfig config)
+  public GitHubOAuthConfig(@GerritServerConfig Config config)
       throws MalformedURLException {
     this.gerritConfig = config;
 
@@ -79,9 +82,9 @@
     fileUpdateMaxRetryIntervalMsec = config.getInt(CONF_SECTION, "fileUpdateMaxRetryIntervalMsec", 3000);
   }
 
-  private Map<String, List<Scope>> getScopes(CompositeConfig config) {
+  private Map<String, List<Scope>> getScopes(Config config) {
     Map<String, List<Scope>> scopes = Maps.newHashMap();
-    Set<String> configKeys = config.getNames(CONF_SECTION);
+    Set<String> configKeys = config.getNames(CONF_SECTION, true);
     for (String key : configKeys) {
       if (key.startsWith("scopes")) {
         String scopesString = config.getString(CONF_SECTION, null, key);