diff --git a/modules/crawlerTest/src/org/labkey/crawlertest/CrawlerTestModule.java b/modules/crawlerTest/src/org/labkey/crawlertest/CrawlerTestModule.java index dbaef42baa..40ca88586e 100644 --- a/modules/crawlerTest/src/org/labkey/crawlertest/CrawlerTestModule.java +++ b/modules/crawlerTest/src/org/labkey/crawlertest/CrawlerTestModule.java @@ -17,7 +17,6 @@ package org.labkey.crawlertest; import org.jetbrains.annotations.NotNull; -import org.labkey.api.data.Container; import org.labkey.api.module.CodeOnlyModule; import org.labkey.api.module.ModuleContext; import org.labkey.api.view.WebPartFactory; @@ -52,11 +51,4 @@ protected void init() public void doStartup(ModuleContext moduleContext) { } - - @Override - @NotNull - public Collection getSummary(Container c) - { - return Collections.emptyList(); - } } diff --git a/modules/dumbster/src/com/dumbster/smtp/SmtpActionType.java b/modules/dumbster/src/com/dumbster/smtp/SmtpActionType.java index 13b6eb6cce..a4b2d72205 100644 --- a/modules/dumbster/src/com/dumbster/smtp/SmtpActionType.java +++ b/modules/dumbster/src/com/dumbster/smtp/SmtpActionType.java @@ -104,37 +104,23 @@ public boolean isStateless() { * @return a String */ public String toString() { - switch(value) { - case CONNECT_BYTE: - return "Connect"; - case EHLO_BYTE: - return "EHLO"; - case MAIL_BYTE: - return "MAIL"; - case RCPT_BYTE: - return "RCPT"; - case DATA_BYTE: - return "DATA"; - case DATA_END_BYTE: - return "."; - case QUIT_BYTE: - return "QUIT"; - case RSET_BYTE: - return "RSET"; - case VRFY_BYTE: - return "VRFY"; - case EXPN_BYTE: - return "EXPN"; - case HELP_BYTE: - return "HELP"; - case NOOP_BYTE: - return "NOOP"; - case UNREC_BYTE: - return "Unrecognized command / data"; - case BLANK_LINE_BYTE: - return "Blank line"; - default: - return "Unknown"; - } + return switch (value) + { + case CONNECT_BYTE -> "Connect"; + case EHLO_BYTE -> "EHLO"; + case MAIL_BYTE -> "MAIL"; + case RCPT_BYTE -> "RCPT"; + case DATA_BYTE -> "DATA"; + case DATA_END_BYTE -> "."; + case QUIT_BYTE -> "QUIT"; + case RSET_BYTE -> "RSET"; + case VRFY_BYTE -> "VRFY"; + case EXPN_BYTE -> "EXPN"; + case HELP_BYTE -> "HELP"; + case NOOP_BYTE -> "NOOP"; + case UNREC_BYTE -> "Unrecognized command / data"; + case BLANK_LINE_BYTE -> "Blank line"; + default -> "Unknown"; + }; } } diff --git a/modules/dumbster/src/com/dumbster/smtp/SmtpMessage.java b/modules/dumbster/src/com/dumbster/smtp/SmtpMessage.java index 3977892c70..f32b06d2dc 100644 --- a/modules/dumbster/src/com/dumbster/smtp/SmtpMessage.java +++ b/modules/dumbster/src/com/dumbster/smtp/SmtpMessage.java @@ -123,12 +123,8 @@ public String getBody() { * @param value header value */ private void addHeader(String name, String value) { - List valueList = headers.get(name); - if (valueList == null) { - valueList = new ArrayList<>(1); - headers.put(name, valueList); - } - valueList.add(value); + List valueList = headers.computeIfAbsent(name, _ -> new ArrayList<>(1)); + valueList.add(value); } /** @@ -137,12 +133,8 @@ private void addHeader(String name, String value) { * @param value header value */ private void appendHeader(String name, String value) { - List valueList = headers.get(name); - if (valueList == null) { - valueList = new ArrayList<>(1); - headers.put(name, valueList); - } - valueList.set(0, valueList.get(0) + value); + List valueList = headers.computeIfAbsent(name, k -> new ArrayList<>(1)); + valueList.set(0, valueList.getFirst() + value); } /** diff --git a/modules/dumbster/src/com/dumbster/smtp/SmtpState.java b/modules/dumbster/src/com/dumbster/smtp/SmtpState.java index a4ff9ab509..07db3c1ca1 100644 --- a/modules/dumbster/src/com/dumbster/smtp/SmtpState.java +++ b/modules/dumbster/src/com/dumbster/smtp/SmtpState.java @@ -66,23 +66,16 @@ private SmtpState(byte value) { * @return a String */ public String toString() { - switch(value) { - case CONNECT_BYTE: - return "CONNECT"; - case GREET_BYTE: - return "GREET"; - case MAIL_BYTE: - return "MAIL"; - case RCPT_BYTE: - return "RCPT"; - case DATA_HEADER_BYTE: - return "DATA_HDR"; - case DATA_BODY_BYTE: - return "DATA_BODY"; - case QUIT_BYTE: - return "QUIT"; - default: - return "Unknown"; - } + return switch (value) + { + case CONNECT_BYTE -> "CONNECT"; + case GREET_BYTE -> "GREET"; + case MAIL_BYTE -> "MAIL"; + case RCPT_BYTE -> "RCPT"; + case DATA_HEADER_BYTE -> "DATA_HDR"; + case DATA_BODY_BYTE -> "DATA_BODY"; + case QUIT_BYTE -> "QUIT"; + default -> "Unknown"; + }; } } diff --git a/modules/dumbster/src/org/labkey/dumbster/model/DumbsterManager.java b/modules/dumbster/src/org/labkey/dumbster/model/DumbsterManager.java index 50f5e09026..32eb0bb3d4 100644 --- a/modules/dumbster/src/org/labkey/dumbster/model/DumbsterManager.java +++ b/modules/dumbster/src/org/labkey/dumbster/model/DumbsterManager.java @@ -102,14 +102,14 @@ public boolean start() props.setProperty("mail.smtp.port", Integer.toString(port)); Session session = Session.getInstance(props); - _log.info("Switching MailHelper to use port " + port); + _log.info("Switching MailHelper to use port {}", port); MailHelper.setSmtpSession(session); - _log.info("Connecting mail recorder to port " + port); + _log.info("Connecting mail recorder to port {}", port); _server = SimpleSmtpServer.start(port); if (_server.isStopped()) { - _log.error("Failed to connect mail recorder. Port " + port + " may be in use."); + _log.error("Failed to connect mail recorder. Port {} may be in use.", port); _server = null; return false; } @@ -123,7 +123,7 @@ public void stop() // viewing until the next call to start() overwrites. if (_server != null) { - _log.info("Reverting MailHelper to " + AppProps.getInstance().getWebappConfigurationFilename() + " configuration"); + _log.info("Reverting MailHelper to {} configuration", AppProps.getInstance().getWebappConfigurationFilename()); MailHelper.setSmtpSession(null); _server.stop(); @@ -138,11 +138,6 @@ public String getName() return "Dumbster manager"; } - @Override - public void shutdownPre() - { - } - @Override public void shutdownStarted() { @@ -165,10 +160,10 @@ public SmtpMessage[] getMessages() // Dumbster returns iterator on list which requires synchronization. synchronized (_server) { - Iterator it = _server.getReceivedEmail(); + Iterator it = _server.getReceivedEmail(); while (it.hasNext()) { - messageList.add((SmtpMessage) it.next()); + messageList.add(it.next()); } } diff --git a/modules/editableModule/src/org/labkey/editablemodule/EditableModuleModule.java b/modules/editableModule/src/org/labkey/editablemodule/EditableModuleModule.java index e6149e0132..e2bbe0367d 100644 --- a/modules/editableModule/src/org/labkey/editablemodule/EditableModuleModule.java +++ b/modules/editableModule/src/org/labkey/editablemodule/EditableModuleModule.java @@ -17,8 +17,6 @@ package org.labkey.editablemodule; import org.jetbrains.annotations.NotNull; -import org.labkey.api.data.Container; -import org.labkey.api.data.ContainerManager; import org.labkey.api.module.CodeOnlyModule; import org.labkey.api.module.ModuleContext; import org.labkey.api.view.WebPartFactory; @@ -53,11 +51,4 @@ protected void init() public void doStartup(ModuleContext moduleContext) { } - - @Override - @NotNull - public Collection getSummary(Container c) - { - return Collections.emptyList(); - } } \ No newline at end of file diff --git a/src/org/labkey/junit/rules/TestWatcher.java b/src/org/labkey/junit/rules/TestWatcher.java index d5ee64db05..e3318a7a0e 100644 --- a/src/org/labkey/junit/rules/TestWatcher.java +++ b/src/org/labkey/junit/rules/TestWatcher.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.jetbrains.annotations.NotNull; import org.junit.AssumptionViolatedException; import org.junit.rules.TestRule; import org.junit.runner.Description; @@ -16,7 +17,7 @@ public abstract class TestWatcher implements TestRule { @Override - public Statement apply(final Statement base, final Description description) { + public @NotNull Statement apply(final @NotNull Statement base, final @NotNull Description description) { return new Statement() { @Override public void evaluate() throws Throwable { diff --git a/src/org/labkey/remoteapi/security/BulkUpdateGroupCommand.java b/src/org/labkey/remoteapi/security/BulkUpdateGroupCommand.java index 65f78950e0..c502b8507c 100644 --- a/src/org/labkey/remoteapi/security/BulkUpdateGroupCommand.java +++ b/src/org/labkey/remoteapi/security/BulkUpdateGroupCommand.java @@ -56,17 +56,17 @@ public BulkUpdateGroupCommand(@NotNull Integer groupId) _groupId = groupId; } - public void setGroupId(Integer groupId) + public void setGroupId(@Nullable Integer groupId) { _groupId = groupId; } - public void setGroupName(String groupName) + public void setGroupName(@Nullable String groupName) { _groupName = groupName; } - public void setMembers(List> members) + public void setMembers(@Nullable List> members) { _members = members; } diff --git a/src/org/labkey/serverapi/collections/ArrayListMap.java b/src/org/labkey/serverapi/collections/ArrayListMap.java index 158f3103f2..37bf15cf26 100644 --- a/src/org/labkey/serverapi/collections/ArrayListMap.java +++ b/src/org/labkey/serverapi/collections/ArrayListMap.java @@ -16,6 +16,7 @@ package org.labkey.serverapi.collections; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import org.junit.Assert; import org.junit.Test; @@ -107,7 +108,7 @@ public Integer remove(Object o) } @Override - public void putAll(Map map) + public void putAll(@NotNull Map map) { _map.putAll(map); } @@ -119,19 +120,19 @@ public void clear() } @Override - public Set keySet() + public @NotNull Set keySet() { return _map.keySet(); } @Override - public Collection values() + public @NotNull Collection values() { return _map.values(); } @Override - public Set> entrySet() + public @NotNull Set> entrySet() { return _map.entrySet(); } @@ -238,7 +239,7 @@ public boolean containsValue(Object value) @Override - public Set> entrySet() + public @NotNull Set> entrySet() { Set> r = new HashSet<>(_row.size() * 2); for (Entry e : _findMap.entrySet()) @@ -255,7 +256,7 @@ public Set> entrySet() @Override - public Set keySet() + public @NotNull Set keySet() { Set ret = _findMap.keySet(); assert null != (ret = Collections.unmodifiableSet(ret)); @@ -288,7 +289,7 @@ public int size() @Override - public Collection values() + public @NotNull Collection values() { ArrayList a = new ArrayList<>(size()); for (Object o : _row) diff --git a/src/org/labkey/serverapi/reader/DataLoader.java b/src/org/labkey/serverapi/reader/DataLoader.java index 05e6ffa357..48166a2504 100644 --- a/src/org/labkey/serverapi/reader/DataLoader.java +++ b/src/org/labkey/serverapi/reader/DataLoader.java @@ -20,6 +20,7 @@ import org.apache.commons.beanutils.Converter; import org.apache.commons.collections4.IteratorUtils; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import org.labkey.remoteapi.collections.CaseInsensitiveHashMap; import org.labkey.serverapi.collections.ArrayListMap; import org.labkey.serverapi.collections.RowMapFactory; @@ -285,7 +286,7 @@ public void setScanAheadLineCount(int count) * Returns an iterator over the data */ @Override - public abstract CloseableIterator> iterator(); + public abstract @NotNull CloseableIterator> iterator(); /** diff --git a/src/org/labkey/test/BaseWebDriverTest.java b/src/org/labkey/test/BaseWebDriverTest.java index 10d9d5ad98..892cf5d4c7 100644 --- a/src/org/labkey/test/BaseWebDriverTest.java +++ b/src/org/labkey/test/BaseWebDriverTest.java @@ -24,9 +24,9 @@ import org.apache.commons.lang3.tuple.Pair; import org.apache.hc.core5.http.HttpStatus; import org.awaitility.Awaitility; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.json.JSONObject; +import org.jetbrains.annotations.NotNull; import org.junit.Assume; import org.junit.AssumptionViolatedException; import org.junit.ClassRule; @@ -298,7 +298,7 @@ private static Class getCurrentTestClass() } @Override - public WebDriver getWrappedDriver() + public @NotNull WebDriver getWrappedDriver() { return SingletonWebDriver.getInstance().getWebDriver(); } @@ -566,7 +566,7 @@ Statement createFailOnTimeoutStatement(Statement statement, Class testClass) } @Override - public Statement apply(Statement base, Description description) + public @NotNull Statement apply(Statement base, Description description) { try { @@ -936,7 +936,7 @@ private void handleFailure(Throwable error, @LoggedParam String testName) if (error instanceof MultipleFailureException mfe) { // Only "handle" primary test failure. Just log failures thrown during @After or @AfterClass methods. - error = mfe.getFailures().get(0); + error = mfe.getFailures().getFirst(); for (int i = 1; i < mfe.getFailures().size(); i++) { TestLogger.error("Secondary error after test:", mfe.getFailures().get(i)); @@ -2465,7 +2465,7 @@ public void startImport() while (!_pipelineRoot.equals(testDir)) { - dirNames.add(0, testDir.getName()); + dirNames.addFirst(testDir.getName()); testDir = testDir.getParentFile(); } @@ -2823,7 +2823,7 @@ protected void executeAndVerifyScript(String script, @Nullable String... altErro if (exception instanceof String exceptionStr) { if (errors.size() == 1) - checker().verifyEquals("Unexpected error message", errors.get(0), exception); + checker().verifyEquals("Unexpected error message", errors.getFirst(), exception); else { for (String error : altErrors) diff --git a/src/org/labkey/test/CachingLocator.java b/src/org/labkey/test/CachingLocator.java deleted file mode 100644 index fdcb40f8c0..0000000000 --- a/src/org/labkey/test/CachingLocator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2015-2017 LabKey Corporation - * - * 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 org.labkey.test; - -import org.openqa.selenium.SearchContext; -import org.openqa.selenium.WebElement; - -import java.util.List; - -public class CachingLocator extends Locator.ImmutableLocator -{ - private List cachedWebElements; - private SearchContext cachedContext; - - public CachingLocator(Locator locator) - { - super(locator); - } - - @Override - public List findElements(SearchContext context) - { - if (cachedWebElements == null || cachedWebElements.isEmpty() || context != cachedContext) - { - cachedWebElements = super.findElements(context); - cachedContext = context; - } - - return cachedWebElements; - } - - @Override - public WebElement findElement(SearchContext context) - { - return findElements(context).get(0); - } -} diff --git a/src/org/labkey/test/ExtraSiteWrapper.java b/src/org/labkey/test/ExtraSiteWrapper.java index 6fc4840e3d..13a6139f8f 100644 --- a/src/org/labkey/test/ExtraSiteWrapper.java +++ b/src/org/labkey/test/ExtraSiteWrapper.java @@ -17,6 +17,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.service.DriverService; @@ -49,7 +50,7 @@ public void close() } @Override - public WebDriver getWrappedDriver() + public @NotNull WebDriver getWrappedDriver() { return extraDriver.getLeft(); } diff --git a/src/org/labkey/test/LabKeySiteWrapper.java b/src/org/labkey/test/LabKeySiteWrapper.java index 0cc14f103e..112757f4c0 100644 --- a/src/org/labkey/test/LabKeySiteWrapper.java +++ b/src/org/labkey/test/LabKeySiteWrapper.java @@ -892,7 +892,7 @@ private void verifyRedirectBehavior(String upgradeText) throws IOException DefaultRedirectStrategy redirectStrategy = new DefaultRedirectStrategy() { @Override - public boolean isRedirected(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws ProtocolException + public boolean isRedirected(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) { boolean isRedirect = false; try @@ -979,7 +979,7 @@ private void verifySiteGroups() // "All Site Users" after sorting takes place List> siteGroups = helper.getSiteGroups(); assertEquals(2, siteGroups.size()); - Map guests = siteGroups.get(0); + Map guests = siteGroups.getFirst(); assertEquals("Guests", guests.get("name")); assertEquals(-3, guests.get("id")); Map users = siteGroups.get(1); diff --git a/src/org/labkey/test/Locator.java b/src/org/labkey/test/Locator.java index 57503a7795..12a611dd7f 100644 --- a/src/org/labkey/test/Locator.java +++ b/src/org/labkey/test/Locator.java @@ -20,8 +20,8 @@ import org.apache.commons.lang3.mutable.MutableObject; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.NotNull; import org.labkey.test.selenium.LazyWebElement; import org.labkey.test.selenium.ReclickingWebElement; import org.labkey.test.selenium.RefindingWebElement; @@ -123,7 +123,7 @@ public Locator index(Integer index) } @Override - public String toString() + public @NotNull String toString() { return wrappedLocator.toString(); } @@ -174,7 +174,7 @@ public Locator describedAs(String description) } @Override - protected WebDriver getWebDriver(SearchContext context) + protected @NotNull WebDriver getWebDriver(@NotNull SearchContext context) { return Objects.requireNonNullElseGet(WebDriverUtils.extractWrappedDriver(context), () -> super.getWebDriver(context)); } @@ -275,7 +275,7 @@ public static WebElement findAnyElementOrNull(SearchContext context, final Locat { els = loc.findElements(context); if (!els.isEmpty()) - return els.get(0); + return els.getFirst(); } return null; } @@ -329,7 +329,7 @@ public final Locator immutable() return new ImmutableLocator(this); } - public abstract String toString(); + public abstract @NotNull String toString(); protected abstract By getBy(); @@ -371,7 +371,7 @@ protected static T extractInputFromFluentWait(FluentWait wait) wrappedContext.setValue(input); return true; }); - return wrappedContext.getValue(); + return wrappedContext.get(); } @Contract(pure = true) @@ -387,7 +387,7 @@ public RefindingWebElement refindWhenNeeded(SearchContext context) } @Override - public WebElement findElement(SearchContext context) + public @NotNull WebElement findElement(@NotNull SearchContext context) { Optional optionalElement = findOptionalElement(context); return optionalElement.orElseThrow(() -> @@ -406,12 +406,12 @@ public Optional findOptionalElement(SearchContext context) List elements = findElements(context); if (elements.isEmpty()) return Optional.empty(); - return Optional.of(elements.get(0)); + return Optional.of(elements.getFirst()); } @Contract(pure = true) @Override - public List findElements(SearchContext context) + public @NotNull List findElements(SearchContext context) { List elements = context.findElements(this.getBy()); boolean matchText = _text != null; @@ -596,7 +596,7 @@ public String toString() }); } - public static IdLocator id(String id) + public static IdLocator id(@NotNull String id) { return new IdLocator(id); } @@ -611,7 +611,7 @@ public static CssLocator css(String selector) return new CssLocator(selector); } - public static XPathLocator xpath(@Language("XPath") String xpathExpr) + public static XPathLocator xpath(@Language("XPath") @NotNull String xpathExpr) { return new XPathLocator(xpathExpr); } @@ -1219,7 +1219,7 @@ public String getLoc() } @Override - public String toString() + public @NotNull String toString() { return _cssLoc.toString(); } @@ -1604,7 +1604,7 @@ public static XPathLocator union(XPathLocator... locators) return new XPathLocator("((" + String.join(")|(", xpaths) + "))"); } - public String toString() + public @NotNull String toString() { return "xpath="+toXpath(); } @@ -1615,7 +1615,7 @@ public String toXpath() } @Override - public List findElements(SearchContext context) + public @NotNull List findElements(SearchContext context) { if (!(context instanceof WebDriver || context instanceof WrapsDriver) || context instanceof WebElement) return decorateWebElements(context.findElements(getRelativeBy())); @@ -1661,7 +1661,7 @@ protected By getBy() return _id == null ? super.getBy() : By.id(_id); } - public String toString() + public @NotNull String toString() { return _id == null ? super.toString() : "id=" + _id; } @@ -1842,7 +1842,7 @@ public CssLocator lastOfType() } @Override - public String toString() + public @NotNull String toString() { return "css=" + getLoc(); } @@ -1867,7 +1867,7 @@ public LinkLocator(@NotNull String linkText) } @Override - public List findElements(SearchContext context) + public @NotNull List findElements(SearchContext context) { List elements; try @@ -1906,7 +1906,7 @@ private String getW3CLinkText(SearchContext context) } @Override - public String toString() + public @NotNull String toString() { return "link=" + _linkText; } diff --git a/src/org/labkey/test/Runner.java b/src/org/labkey/test/Runner.java index 39826754ba..1ed182af35 100644 --- a/src/org/labkey/test/Runner.java +++ b/src/org/labkey/test/Runner.java @@ -183,11 +183,11 @@ private static List> readClasses(File file) } catch (IOException e) { - LOG.warn("Error reading " + file.getAbsolutePath(), e); + LOG.warn("Error reading {}", file.getAbsolutePath(), e); } catch (ClassNotFoundException e) { - LOG.warn("Can't find class '" + line + "'", e); + LOG.warn("Can't find class '{}'", line, e); } } @@ -262,7 +262,7 @@ else if (test instanceof JUnit4TestAdapter adapter) } catch (Throwable t) { - LOG.warn("WARNING: failure cleaning test: " + t.getMessage(), t); + LOG.warn("WARNING: failure cleaning test: {}", t.getMessage(), t); // fall through } } @@ -303,7 +303,7 @@ public void endTest(Test _test) { } if (!(test instanceof JUnitTest.RemoteTest)) { logToServer("=== Starting " + currentTestName + getProgress() + " ==="); - LOG.info("=============== Starting " + currentTestName + getProgress() + " ================="); + LOG.info("=============== Starting {}{} =================", currentTestName, getProgress()); } // This stub matches the failure generated by JUnit when it fails during static setup/teardown (e.g. @BeforeClass) @@ -326,7 +326,7 @@ public void endTest(Test _test) { } { String result = failed.booleanValue() || errored.booleanValue() ? "Failed " : "Completed "; TestLogger.resetLogger(); - LOG.info("=============== " + result + currentTestName + getProgress() + " ================="); + LOG.info("=============== {}{}{} =================", result, currentTestName, getProgress()); logToServer("=== " + result + currentTestName + getProgress() + " ==="); } @@ -397,13 +397,13 @@ private static List> getTestClasses(List testNames) Class testClass = _suites.getTestByName(testClassName); if (testClass == null) { - LOG.error("Couldn't find test '" + testClassName + "'. Valid tests are:"); + LOG.error("Couldn't find test '{}'. Valid tests are:", testClassName); List sortedTests = _suites.getAllTests().getTestNames(); Collections.sort(sortedTests); for (String c : sortedTests) - LOG.error(" " + c); + LOG.error(" {}", c); throw new IllegalArgumentException("Couldn't find test '" + testClassName + "'. Check log for details."); } testClasses.add(testClass); @@ -453,33 +453,33 @@ private static void addTests(TestSuite suite, Set> testClasses) throws WebTestHelper.DatabaseType databaseType = WebTestHelper.getDatabaseType(); if (interfaces.contains(PostgresOnlyTest.class) && databaseType != WebTestHelper.DatabaseType.PostgreSQL) { - LOG.warn("** Skipping " + testClass.getSimpleName() + " test for unsupported database: " + databaseType); + LOG.warn("** Skipping {} test for unsupported database: {}", testClass.getSimpleName(), databaseType); continue; } else if (interfaces.contains(SqlserverOnlyTest.class) && databaseType != WebTestHelper.DatabaseType.MicrosoftSQLServer) { - LOG.warn("** Skipping " + testClass.getSimpleName() + " test for unsupported database: " + databaseType); + LOG.warn("** Skipping {} test for unsupported database: {}", testClass.getSimpleName(), databaseType); continue; } if (interfaces.contains(DevModeOnlyTest.class) && !TestProperties.isDevModeEnabled()) { - LOG.warn("** Skipping " + testClass.getSimpleName() + ": server must be in dev mode"); + LOG.warn("** Skipping {}: server must be in dev mode", testClass.getSimpleName()); continue; } else if (interfaces.contains(ProductionModeOnlyTest.class) && TestProperties.isDevModeEnabled()) { - LOG.warn("** Skipping " + testClass.getSimpleName() + ": server must be in production mode"); + LOG.warn("** Skipping {}: server must be in production mode", testClass.getSimpleName()); continue; } else if (interfaces.contains(WindowsOnlyTest.class) && !SystemUtils.IS_OS_WINDOWS) { - LOG.warn("** Skipping " + testClass.getSimpleName() + " test for unsupported operating system: " + SystemUtils.OS_NAME); + LOG.warn("** Skipping {} test for unsupported operating system: {}", testClass.getSimpleName(), SystemUtils.OS_NAME); continue; } else if (interfaces.contains(NonWindowsTest.class) && SystemUtils.IS_OS_WINDOWS) { - LOG.warn("** Skipping " + testClass.getSimpleName() + " test for unsupported operating system: " + SystemUtils.OS_NAME); + LOG.warn("** Skipping {} test for unsupported operating system: {}", testClass.getSimpleName(), SystemUtils.OS_NAME); continue; } test = new JUnit4TestAdapter(testClass); @@ -530,22 +530,22 @@ public String describe() if (!unfoundTests.isEmpty()) { - LOG.error("Test(s) do not exist in class " + testClass.getSimpleName()); + LOG.error("Test(s) do not exist in class {}", testClass.getSimpleName()); LOG.error("Specified:"); for (String unfoundTest : unfoundTests) { - LOG.error(" " + unfoundTest); + LOG.error(" {}", unfoundTest); } LOG.error("Found:"); for (String foundTest : foundTests) { - LOG.error(" " + foundTest); + LOG.error(" {}", foundTest); } if (!ignoredTests.isEmpty()) LOG.error("Disabled:"); for (String ignoredTest : ignoredTests) { - LOG.error(" " + ignoredTest); + LOG.error(" {}", ignoredTest); } throw new IllegalArgumentException("Couldn't find test(s) [" + String.join(", ", unfoundTests) + "] in class '" + testClass.getSimpleName() + "'. Check log for details."); } @@ -687,7 +687,7 @@ private static void writeTimeReport() LOG.info(getFixedWidthString("Crawler Warnings: ", "", width)); for (String warning : crawlWarnings) { - LOG.info(" " + warning); + LOG.info(" {}", warning); } } } @@ -699,11 +699,11 @@ private static void writeTimeReport() List values = TeamCityUtils.getBuildStatistics().get(stat); String valueStr; if (values.size() == 1) - valueStr = String.valueOf(values.get(0)); + valueStr = String.valueOf(values.getFirst()); else valueStr = values.toString(); - LOG.info(" " + stat + " = " + valueStr); + LOG.info(" {} = {}", stat, valueStr); } } Map> actionWarnings = WebDriverWrapper.getActionWarnings(); @@ -712,18 +712,18 @@ private static void writeTimeReport() LOG.info(getCenteredText("Test Warnings", '-', width)); for (String warning : actionWarnings.keySet()) { - LOG.info(" " + warning + ":"); + LOG.info(" {}:", warning); List actions = new ArrayList<>(actionWarnings.get(warning)); Collections.sort(actions); for (String action : actions) { - LOG.info(" " + action); + LOG.info(" {}", action); } } } LOG.info("-".repeat(width)); - LOG.info(getFixedWidthString("Total duration:", formatDuration(total), width) + "\n"); - LOG.info("Completed " + FastDateFormat.getInstance("yyyy-MM-dd HH:mm").format(new Date())); + LOG.info("{}\n", getFixedWidthString("Total duration:", formatDuration(total), width)); + LOG.info("Completed {}", FastDateFormat.getInstance("yyyy-MM-dd HH:mm").format(new Date())); } private static String formatDuration(long ms) @@ -773,7 +773,7 @@ private static TestSet getCompositeTestSet(List suitesColl) if (suitesColl.isEmpty()) return _suites.getEmptyTestSet(); if (suitesColl.size() == 1) - return getSuite(suitesColl.get(0)); + return getSuite(suitesColl.getFirst()); TestSet tests = new TestSet(); List includeSuites = new ArrayList<>(); @@ -808,9 +808,9 @@ private static TestSet getSuite(String suiteName) List sortedSuites = new ArrayList<>(_suites.getSuites()); Collections.sort(sortedSuites); - LOG.error("Couldn't find suite '" + suiteName + "'. Valid suites are:"); + LOG.error("Couldn't find suite '{}'. Valid suites are:", suiteName); for (String suite : sortedSuites) - LOG.error(" " + suite); + LOG.error(" {}", suite); throw new IllegalArgumentException("Couldn't find suite '" + suiteName + "'. Check log for details."); } return testSet; @@ -943,7 +943,7 @@ private static void dumpTsv(String fileName) throw new RuntimeException("Unable to dump test list", ioe); } - LOG.info("Test list dumped to: " + dumpFile.getAbsolutePath()); + LOG.info("Test list dumped to: {}", dumpFile.getAbsolutePath()); } private static int getTestTimeout(Class testClass) @@ -1041,10 +1041,10 @@ else if (testNames.isEmpty()) Test test = e.nextElement(); Class testClass = getTestClass(test); _remainingTests.add(testClass); - LOG.info(" " + getTestName(test)); + LOG.info(" {}", getTestName(test)); for (String testMethod : specifiedTestMethods.getOrDefault(testClass, Collections.emptyList())) { - LOG.info(" ." + testMethod); + LOG.info(" .{}", testMethod); } } _testCount = _remainingTests.size(); @@ -1064,7 +1064,7 @@ private static void frontLoadTestsOfModifiedModules(TestSet set) LOG.info("Prioritizing tests for modified modules:"); for (String module : modifiedModules) { - LOG.info("\t" + module); + LOG.info("\t{}", module); } int movedTests = 0; @@ -1105,7 +1105,7 @@ private static Collection getModifiedModules() String [] splitLine = line.split(":"); if (splitLine.length != 3) { - LOG.warn("Unexpected changelist format: " + line); + LOG.warn("Unexpected changelist format: {}", line); continue; } @@ -1114,7 +1114,7 @@ private static Collection getModifiedModules() if ("NOT_CHANGED".equals(changeType)) { - LOG.info("File in changelist NOT_CHANGED: " + relativeFilePath); + LOG.info("File in changelist NOT_CHANGED: {}", relativeFilePath); continue; } @@ -1142,7 +1142,7 @@ private static String getModuleNameFromPath(File path) return parent.getName(); } while((parent = parent.getParentFile()) != null); - LOG.warn("Unable to determine module for: " + path); + LOG.warn("Unable to determine module for: {}", path); return null; } @@ -1202,14 +1202,14 @@ private static void waitForTomcat() throws IOException return response.getCode(); }); // Any response is ok. - LOG.info("Server started after: " + formatDuration(timer.elapsed().toMillis())); + LOG.info("Server started after: {}", formatDuration(timer.elapsed().toMillis())); return; } catch (IOException e) { if (timer.isTimedOut()) { - LOG.info("Server failed to start after: " + formatDuration(timeout.toMillis())); + LOG.info("Server failed to start after: {}", formatDuration(timeout.toMillis())); throw e; } WebDriverWrapper.sleep(1000); diff --git a/src/org/labkey/test/TestFileUtils.java b/src/org/labkey/test/TestFileUtils.java index d73ad973a1..7a200627b6 100644 --- a/src/org/labkey/test/TestFileUtils.java +++ b/src/org/labkey/test/TestFileUtils.java @@ -159,7 +159,7 @@ public static File getLabKeyRoot() _labkeyRoot = _labkeyRoot.getAbsoluteFile().toPath().normalize().toFile(); - LOG.info("Using labkey root '" + _labkeyRoot + "', as provided by system property 'labkey.root'."); + LOG.info("Using labkey root '{}', as provided by system property 'labkey.root'.", _labkeyRoot); } else { @@ -282,7 +282,7 @@ public static File getSampleData(String relativePath) sampleDatas.stream().map(File::getAbsolutePath).collect(Collectors.joining("\n"))); } - return sampleDatas.get(0); + return sampleDatas.getFirst(); } /** @@ -413,7 +413,7 @@ public static File ensureTestTempFile(String... children) throws IOException public static void delete(File file) { - LOG.info("Deleting from filesystem: " + file.toString()); + LOG.info("Deleting from filesystem: {}", file.toString()); checkFileLocation(file); if (!file.exists()) @@ -424,12 +424,12 @@ public static void delete(File file) if (!file.exists()) LOG.info("Deletion successful."); else - LOG.info("Failed to delete : " + file.getAbsolutePath()); + LOG.info("Failed to delete : {}", file.getAbsolutePath()); } public static void deleteDir(File dir) { - LOG.info("Deleting from filesystem: " + dir.toString()); + LOG.info("Deleting from filesystem: {}", dir.toString()); checkFileLocation(dir); if (!dir.exists()) return; @@ -441,7 +441,7 @@ public static void deleteDir(File dir) } catch (IOException e) { - LOG.info("WARNING: Exception deleting directory -- " + e.getMessage()); + LOG.info("WARNING: Exception deleting directory -- {}", e.getMessage()); } } @@ -452,7 +452,7 @@ private static void checkFileLocation(File file) if (!FileUtils.directoryContains(getLabKeyRoot(), file)) { // TODO: Consider throwing IllegalArgumentException - LOG.info("DEBUG: Attempting to delete a file outside of test enlistment: " + getLabKeyRoot()); + LOG.info("DEBUG: Attempting to delete a file outside of test enlistment: {}", getLabKeyRoot()); } } catch (IOException ignore) { } diff --git a/src/org/labkey/test/WebDriverWrapper.java b/src/org/labkey/test/WebDriverWrapper.java index af3e2b6a67..5311c60f72 100644 --- a/src/org/labkey/test/WebDriverWrapper.java +++ b/src/org/labkey/test/WebDriverWrapper.java @@ -1063,7 +1063,7 @@ protected void closeExtraWindows() } if (windows.size() > 1) { - getDriver().switchTo().window(windows.get(0)); + getDriver().switchTo().window(windows.getFirst()); } } @@ -2108,7 +2108,7 @@ public long doAndMaybeWaitForPageToLoad(int msWait, Supplier action) getPageLoadListeners().forEach((listener) -> { if (null != listener) { - TestLogger.log().trace("beforePageLoad - " + listener.getClass().getSimpleName()); + TestLogger.log().trace("beforePageLoad - {}", listener.getClass().getSimpleName()); listener.beforePageLoad(); } }); @@ -2125,7 +2125,7 @@ public long doAndMaybeWaitForPageToLoad(int msWait, Supplier action) getPageLoadListeners().forEach((listener) -> { if (null != listener) { - TestLogger.log().trace("afterPageLoad - " + listener.getClass().getSimpleName()); + TestLogger.log().trace("afterPageLoad - {}", listener.getClass().getSimpleName()); listener.afterPageLoad(); } }); @@ -3056,21 +3056,13 @@ public void dragAndDrop(Locator from, Locator to, Position pos) public void dragAndDrop(WebElement fromEl, WebElement toEl, Position pos) { - int y; - switch (pos) + int y = switch (pos) { - case top: - y = 1; - break; - case bottom: - y = toEl.getSize().getHeight() - 1; - break; - case middle: - y = toEl.getSize().getHeight() / 2; - break; - default: - throw new IllegalArgumentException("Unexpected position: " + pos); - } + case top -> 1; + case bottom -> toEl.getSize().getHeight() - 1; + case middle -> toEl.getSize().getHeight() / 2; + default -> throw new IllegalArgumentException("Unexpected position: " + pos); + }; Actions builder = new Actions(getDriver()); builder.clickAndHold(fromEl).moveToElement(toEl, toEl.getSize().getWidth() / 2, y).release().build().perform(); @@ -4063,7 +4055,7 @@ public void selectOptionByTextContaining(WebElement selectElement, String value) } if (matches.size() == 1) - select.selectByVisibleText(matches.get(0)); + select.selectByVisibleText(matches.getFirst()); else if (matches.isEmpty()) select.selectByVisibleText(value); else diff --git a/src/org/labkey/test/WebDriverWrapperImpl.java b/src/org/labkey/test/WebDriverWrapperImpl.java index c2c24eb15a..6fb5b62004 100644 --- a/src/org/labkey/test/WebDriverWrapperImpl.java +++ b/src/org/labkey/test/WebDriverWrapperImpl.java @@ -15,6 +15,7 @@ */ package org.labkey.test; +import org.jetbrains.annotations.NotNull; import org.openqa.selenium.WebDriver; public class WebDriverWrapperImpl extends WebDriverWrapper @@ -27,7 +28,7 @@ public WebDriverWrapperImpl(WebDriver driver) } @Override - public WebDriver getWrappedDriver() + public @NotNull WebDriver getWrappedDriver() { return driver; } diff --git a/src/org/labkey/test/WebTestHelper.java b/src/org/labkey/test/WebTestHelper.java index d397ee3657..a77d4ee248 100644 --- a/src/org/labkey/test/WebTestHelper.java +++ b/src/org/labkey/test/WebTestHelper.java @@ -287,7 +287,7 @@ public static Integer getWebPort() else { _webPort = Integer.parseInt(webPortStr); - LOG.info("Using labkey port '" + _webPort + "', as provided by system property 'labkey.port'."); + LOG.info("Using labkey port '{}', as provided by system property 'labkey.port'.", _webPort); } } return _webPort; @@ -308,7 +308,7 @@ public static String getTargetServer() _targetServer = DEFAULT_TARGET_SERVER; } else - LOG.info("Using target server '" + _targetServer + "', as provided by system property 'labkey.server'."); + LOG.info("Using target server '{}', as provided by system property 'labkey.server'.", _targetServer); } return _targetServer; } @@ -481,7 +481,7 @@ public static String getContextPath() _contextPath = DEFAULT_CONTEXT_PATH; } else - LOG.info("Using labkey context path '" + _contextPath + "', as provided by system property 'labkey.contextpath'."); + LOG.info("Using labkey context path '{}', as provided by system property 'labkey.contextpath'.", _contextPath); _contextPath = StringUtils.strip(_contextPath, "/ "); if (!_contextPath.isEmpty()) diff --git a/src/org/labkey/test/components/ChartTypeDialog.java b/src/org/labkey/test/components/ChartTypeDialog.java index 206897e76b..beaf7a3250 100644 --- a/src/org/labkey/test/components/ChartTypeDialog.java +++ b/src/org/labkey/test/components/ChartTypeDialog.java @@ -492,7 +492,7 @@ public ArrayList getColumnList() String rawText = elementCache().columnList.getText(); String[] textArray = rawText.split("\n"); ArrayList arrayList = new ArrayList<>(Arrays.asList(textArray)); - arrayList.remove(0); // Remove the first element in the list. This is the title "Columns". + arrayList.removeFirst(); // Remove the first element in the list. This is the title "Columns". return arrayList; } diff --git a/src/org/labkey/test/components/ColorPickerInput.java b/src/org/labkey/test/components/ColorPickerInput.java index 48fa2e5048..f5ec0a7ae4 100644 --- a/src/org/labkey/test/components/ColorPickerInput.java +++ b/src/org/labkey/test/components/ColorPickerInput.java @@ -35,7 +35,7 @@ public void setHexValue(String hexValue) List inputs = Locator.tag("input").findElements(this); if (inputs.isEmpty()) throw new NoSuchElementException("Input tag not found in color picker"); - WebElement hexInput = inputs.get(0); + WebElement hexInput = inputs.getFirst(); new Input(hexInput, getDriver()).setWithPaste(hexValue); } @@ -44,7 +44,7 @@ public String getHexValue() List inputs = Locator.tag("input").findElements(this); if (inputs.isEmpty()) throw new NoSuchElementException("Input tag not found in color picker"); - WebElement hexInput = inputs.get(0); + WebElement hexInput = inputs.getFirst(); return new Input(hexInput, getDriver()).getValue(); } diff --git a/src/org/labkey/test/components/CustomizeView.java b/src/org/labkey/test/components/CustomizeView.java index 212a7590ea..37d0277831 100644 --- a/src/org/labkey/test/components/CustomizeView.java +++ b/src/org/labkey/test/components/CustomizeView.java @@ -433,7 +433,7 @@ public void addFilter(CharSequence fieldKey, String filter_type, String filter) Locator.XPathLocator clauseXPath = itemXPath.append("//tr[@clauseindex]"); List filterClauses = clauseXPath.findElements(getDriver()); - WebElement clauseRow = filterClauses.get(filterClauses.size() - 1); + WebElement clauseRow = filterClauses.getLast(); ComboBox filterTypeCombo = new ComboBox.ComboBoxFinder(getDriver()).withIdPrefix("labkey-filterOpCombo").find(clauseRow); filterTypeCombo.selectComboBoxItem(filter_type); diff --git a/src/org/labkey/test/components/PlateGrid.java b/src/org/labkey/test/components/PlateGrid.java index 0646050d74..5535cafab8 100644 --- a/src/org/labkey/test/components/PlateGrid.java +++ b/src/org/labkey/test/components/PlateGrid.java @@ -76,7 +76,7 @@ private void doInit() rowName++; } - final int columnCount = _gridValues.get(0).size(); + final int columnCount = _gridValues.getFirst().size(); _colsIndex = new HashMap<>(); for(int j = 0; j < columnCount; j++) { diff --git a/src/org/labkey/test/components/PlateSummary.java b/src/org/labkey/test/components/PlateSummary.java index 76dd99cd0e..6d944734c3 100644 --- a/src/org/labkey/test/components/PlateSummary.java +++ b/src/org/labkey/test/components/PlateSummary.java @@ -21,7 +21,6 @@ import org.openqa.selenium.support.ui.ExpectedConditions; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -79,7 +78,7 @@ public void selectMeasurement(Measurement measurement) { _test._ext4Helper.selectRadioButton("Measurement", measurement.label); _measurement = measurement; - _test.shortWait().until(ExpectedConditions.visibilityOf(elementCache().getCells(0).get(0))); + _test.shortWait().until(ExpectedConditions.visibilityOf(elementCache().getCells(0).getFirst())); } private int getRowCount() @@ -141,11 +140,8 @@ protected List getCells(int row) { if (dataCells == null) dataCells = new TreeMap<>(); - if (dataCells.get(_measurement) == null) - dataCells.put(_measurement, new TreeMap<>()); - if (dataCells.get(_measurement).get(row) == null) - dataCells.get(_measurement).put(row, Collections.unmodifiableList(Locator.css("td:not(:first-child) a." + _measurement.locatorClass).findElements(getDataRow(row)))); - return dataCells.get(_measurement).get(row); + return dataCells.computeIfAbsent(_measurement, _ -> new TreeMap<>()) + .computeIfAbsent(row, _ -> List.copyOf(Locator.css("td:not(:first-child) a." + _measurement.locatorClass).findElements(getDataRow(row)))); } protected WebElement getCell(int row, int col) diff --git a/src/org/labkey/test/components/domain/DomainFormPanel.java b/src/org/labkey/test/components/domain/DomainFormPanel.java index f235c2391f..bde99266fb 100644 --- a/src/org/labkey/test/components/domain/DomainFormPanel.java +++ b/src/org/labkey/test/components/domain/DomainFormPanel.java @@ -1,6 +1,7 @@ package org.labkey.test.components.domain; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import org.labkey.test.BootstrapLocators; import org.labkey.test.Locator; import org.labkey.test.WebDriverWrapper; @@ -288,7 +289,7 @@ public DomainFieldRow addField(String name) elementCache().addFieldButton.click(); List fieldRows = elementCache().findFieldRows(); - DomainFieldRow newFieldRow = fieldRows.get(fieldRows.size() - 1); + DomainFieldRow newFieldRow = fieldRows.getLast(); newFieldRow.setName(name); return newFieldRow; } @@ -309,7 +310,7 @@ public DomainFieldRow manuallyDefineFields(String name) { clickManuallyDefineFields(); - DomainFieldRow newFieldRow = elementCache().findFieldRows().get(0); + DomainFieldRow newFieldRow = elementCache().findFieldRows().getFirst(); newFieldRow.setName(name); return newFieldRow; } @@ -644,7 +645,7 @@ protected class ElementCache extends DomainPanel. final WebElement el = Locator.css(".domain-form-add-btn .btn").findWhenNeeded(DomainFormPanel.this); @Override - public WebElement getWrappedElement() + public @NotNull WebElement getWrappedElement() { return el; } @@ -716,7 +717,7 @@ private DomainFieldRow findFieldRow(String name) final WebElement el = Locator.css(".domain-form-manual-btn").findWhenNeeded(DomainFormPanel.this); @Override - public WebElement getWrappedElement() + public @NotNull WebElement getWrappedElement() { return el; } diff --git a/src/org/labkey/test/components/domain/RegexValidatorDialog.java b/src/org/labkey/test/components/domain/RegexValidatorDialog.java index 2320b570f3..e6382aedca 100644 --- a/src/org/labkey/test/components/domain/RegexValidatorDialog.java +++ b/src/org/labkey/test/components/domain/RegexValidatorDialog.java @@ -30,7 +30,7 @@ List validationPanels() } public RegexValidatorPanel getValidationPanel() { - return validationPanels().get(0); + return validationPanels().getFirst(); } public RegexValidatorPanel getValidationPanel(int index) { diff --git a/src/org/labkey/test/components/dumbster/EmailRecordTable.java b/src/org/labkey/test/components/dumbster/EmailRecordTable.java index 6b7625dc54..cc31cea6f0 100644 --- a/src/org/labkey/test/components/dumbster/EmailRecordTable.java +++ b/src/org/labkey/test/components/dumbster/EmailRecordTable.java @@ -114,7 +114,7 @@ public EmailMessage getMessageWithSubjectContaining(String subjectPart) public EmailMessage getMessage(String subject) { List messages = getMessages(subject); - return messages.isEmpty() ? null : messages.get(0); + return messages.isEmpty() ? null : messages.getFirst(); } public List getMessages(String subject) @@ -130,7 +130,7 @@ public WebElement getRowEl(EmailMessage message) public EmailMessage getMessageRegEx(String regExp) { List messages = getMessages(subject -> subject.matches(regExp)); - return messages.isEmpty() ? null : messages.get(0); + return messages.isEmpty() ? null : messages.getFirst(); } private List getMessages(Predicate subjectFilter) diff --git a/src/org/labkey/test/components/ext4/Window.java b/src/org/labkey/test/components/ext4/Window.java index 10dca66f09..03972b2487 100644 --- a/src/org/labkey/test/components/ext4/Window.java +++ b/src/org/labkey/test/components/ext4/Window.java @@ -71,7 +71,7 @@ private static WebElement frontmostWindow(WindowFinder finder) } else { - return allWindows.get(0); + return allWindows.getFirst(); } } diff --git a/src/org/labkey/test/components/html/BootstrapMenu.java b/src/org/labkey/test/components/html/BootstrapMenu.java index a4e5ee3270..3d0ff17a15 100644 --- a/src/org/labkey/test/components/html/BootstrapMenu.java +++ b/src/org/labkey/test/components/html/BootstrapMenu.java @@ -152,7 +152,7 @@ public WebElement findVisibleMenuPanel() WebElement menuList = findOpenMenu(); List submenus = Locator.css("ul.dropdown-layer-menu.open").findElements(menuList); if (!submenus.isEmpty()) - return submenus.get(submenus.size() - 1); /* if one or more submenus are open, use the last open one */ + return submenus.getLast(); /* if one or more submenus are open, use the last open one */ return menuList; } diff --git a/src/org/labkey/test/components/html/SelectWrapper.java b/src/org/labkey/test/components/html/SelectWrapper.java index 74c39d7e94..f3cecaa001 100644 --- a/src/org/labkey/test/components/html/SelectWrapper.java +++ b/src/org/labkey/test/components/html/SelectWrapper.java @@ -15,6 +15,7 @@ */ package org.labkey.test.components.html; +import org.jetbrains.annotations.NotNull; import org.labkey.test.Locator; import org.labkey.test.WebDriverWrapper; import org.labkey.test.components.Component; @@ -36,7 +37,7 @@ protected SelectWrapper(WebElement element) super(new RemoteWebElement() { @Override - public String getTagName() + public @NotNull String getTagName() { return "select"; } @@ -63,7 +64,7 @@ public static Component.SimpleComponentFinder