Merge branch 'stable-3.2'

* stable-3.2:
  Error Prone: Enable and fix ClassCanBeStatic
  AutoRegisterModulesTest: Declare inner classes as static
  Update git submodules
  Fix issue with auto registering ssh commands
  Convert plugin's name to lowercase when generate hook name
  Update git submodules
  Update git submodules
  ErrorProne: Increase severity of FunctionalInterfaceClash to ERROR
  Revert "LifecycleListener: Mark stop method as default to make it optional"
  Update git submodules
  LifecycleListener: Mark stop method as default to make it optional

Change-Id: Ie86ec489f985cf0c024d70e555c5f47d961a155d
This commit is contained in:
David Pursehouse
2020-06-25 15:55:50 +09:00
5 changed files with 110 additions and 3 deletions

View File

@@ -158,7 +158,7 @@ class AutoRegisterModules {
return;
}
if (is("org.apache.sshd.server.Command", clazz)) {
if (is("org.apache.sshd.server.command.Command", clazz)) {
sshGen.export(export, clazz);
} else if (is("javax.servlet.http.HttpServlet", clazz)) {
httpGen.export(export, clazz);

View File

@@ -589,7 +589,7 @@ public class PluginGuiceEnvironment {
return false;
}
if (is("org.apache.sshd.server.Command", type)) {
if (is("org.apache.sshd.server.command.Command", type)) {
return false;
}

View File

@@ -63,6 +63,7 @@ junit_tests(
"//java/com/google/gerrit/server/schema",
"//java/com/google/gerrit/server/schema/testing",
"//java/com/google/gerrit/server/util/time",
"//java/com/google/gerrit/sshd",
"//java/com/google/gerrit/testing:assertable-executor",
"//java/com/google/gerrit/testing:gerrit-test-util",
"//java/com/google/gerrit/truth",

View File

@@ -0,0 +1,101 @@
// Copyright (C) 2020 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.google.gerrit.server.plugins;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import com.google.common.collect.Lists;
import com.google.gerrit.extensions.annotations.Export;
import com.google.gerrit.extensions.annotations.Listen;
import com.google.gerrit.sshd.SshCommand;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.jar.Manifest;
import org.junit.Test;
public class AutoRegisterModulesTest {
@Test
public void shouldRegisterSshCommand() throws InvalidPluginException {
ModuleGenerator sshModule = mock(ModuleGenerator.class);
PluginGuiceEnvironment env = mock(PluginGuiceEnvironment.class);
when(env.hasSshModule()).thenReturn(true);
when(env.newSshModuleGenerator()).thenReturn(sshModule);
PluginContentScanner scanner = new TestPluginContextScanner();
ClassLoader classLoader = this.getClass().getClassLoader();
AutoRegisterModules objectUnderTest =
new AutoRegisterModules("test_plugin_name", env, scanner, classLoader);
objectUnderTest.discover();
verify(sshModule).setPluginName("test_plugin_name");
verify(sshModule).export(any(Export.class), eq(TestSshCommand.class));
}
@Export(value = "test")
public static class TestSshCommand extends SshCommand {
@Override
protected void run() throws UnloggedFailure, Failure, Exception {}
}
private static class TestPluginContextScanner implements PluginContentScanner {
@Override
public Manifest getManifest() throws IOException {
return null;
}
@Override
public Map<Class<? extends Annotation>, Iterable<ExtensionMetaData>> scan(
String pluginName, Iterable<Class<? extends Annotation>> annotations)
throws InvalidPluginException {
Map<Class<? extends Annotation>, Iterable<ExtensionMetaData>> extensions = new HashMap<>();
extensions.put(
Export.class,
Lists.newArrayList(
new ExtensionMetaData(
"com.google.gerrit.server.plugins.AutoRegisterModulesTest$TestSshCommand",
"com.google.gerrit.extensions.annotations.Export")));
extensions.put(Listen.class, Lists.newArrayList());
return extensions;
}
@Override
public Optional<PluginEntry> getEntry(String resourcePath) throws IOException {
return null;
}
@Override
public InputStream getInputStream(PluginEntry entry) throws IOException {
return null;
}
@Override
public Enumeration<PluginEntry> entries() {
return null;
}
}
}

View File

@@ -27,7 +27,12 @@ GrDomHooksManager.prototype._getHookName = function(endpointName,
if (opt_moduleName) {
return endpointName + ' ' + opt_moduleName;
} else {
return this._plugin.getPluginName() + '-autogenerated-' + endpointName;
// lowercase in case plugin's name contains uppercase letters
// TODO: this still can not prevent if plugin has invalid char
// other than uppercase, but is the first step
// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
const pluginName = this._plugin.getPluginName() || 'unknown_plugin';
return pluginName.toLowerCase() + '-autogenerated-' + endpointName;
}
};