You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/05/24 09:18:11 UTC

[james-project] branch master updated: [REFACTORING] Avoid Optional::orElse where it looks expensive

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 9a45669  [REFACTORING] Avoid Optional::orElse where it looks expensive
9a45669 is described below

commit 9a45669e4fa73b04a1b0c6c8f70884e1ad3830bc
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sat May 22 13:00:54 2021 +0700

    [REFACTORING] Avoid Optional::orElse where it looks expensive
    
    Favor orElseGet in such places.
    
    Use constants where it makes sense.
---
 .../src/main/java/org/apache/james/core/quota/QuotaCountLimit.java | 4 +++-
 core/src/main/java/org/apache/james/core/quota/QuotaSizeLimit.java | 4 ++--
 .../src/main/java/org/apache/james/mailbox/model/FetchGroup.java   | 2 +-
 .../src/main/java/org/apache/james/mailbox/model/MailboxACL.java   | 7 +++----
 .../apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java | 6 +++---
 .../james/imap/decode/parser/SetAnnotationCommandParser.java       | 2 +-
 .../java/org/apache/james/protocols/pop3/core/MDCConstants.java    | 4 ++--
 .../java/org/apache/james/util/mime/MessageContentExtractor.java   | 4 ++--
 .../util/src/main/java/org/apache/james/util/streams/Limit.java    | 7 ++++---
 .../util/src/main/java/org/apache/james/util/streams/Offset.java   | 5 +++--
 .../james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java | 2 +-
 .../org/apache/james/transport/mailets/jsieve/VacationReply.java   | 2 +-
 .../src/main/java/org/apache/james/jmap/draft/model/Keyword.java   | 2 +-
 .../java/org/apache/james/jmap/draft/utils/FilterToCriteria.java   | 2 +-
 .../java/org/apache/james/jmap/mailet/filter/ContentMatcher.java   | 2 +-
 .../java/org/apache/james/imapserver/netty/IMAPMDCContext.java     | 2 +-
 16 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/core/src/main/java/org/apache/james/core/quota/QuotaCountLimit.java b/core/src/main/java/org/apache/james/core/quota/QuotaCountLimit.java
index 40add28..c8752ea 100644
--- a/core/src/main/java/org/apache/james/core/quota/QuotaCountLimit.java
+++ b/core/src/main/java/org/apache/james/core/quota/QuotaCountLimit.java
@@ -26,8 +26,10 @@ import com.google.common.base.Preconditions;
 
 public class QuotaCountLimit implements QuotaLimitValue<QuotaCountLimit> {
 
+    private static final QuotaCountLimit UNLIMITED = new QuotaCountLimit(Optional.empty());
+
     public static QuotaCountLimit unlimited() {
-        return new QuotaCountLimit(Optional.empty());
+        return UNLIMITED;
     }
 
     public static QuotaCountLimit count(long value) {
diff --git a/core/src/main/java/org/apache/james/core/quota/QuotaSizeLimit.java b/core/src/main/java/org/apache/james/core/quota/QuotaSizeLimit.java
index 968a11b..fbbccc8 100644
--- a/core/src/main/java/org/apache/james/core/quota/QuotaSizeLimit.java
+++ b/core/src/main/java/org/apache/james/core/quota/QuotaSizeLimit.java
@@ -26,10 +26,10 @@ import com.google.common.base.Preconditions;
 
 public class QuotaSizeLimit implements QuotaLimitValue<QuotaSizeLimit> {
 
-    public static final QuotaSizeLimit QUOTA_SIZE = new QuotaSizeLimit(Optional.empty());
+    private static final QuotaSizeLimit UNLIMITED = new QuotaSizeLimit(Optional.empty());
 
     public static QuotaSizeLimit unlimited() {
-        return QUOTA_SIZE;
+        return UNLIMITED;
     }
 
     public static QuotaSizeLimit size(long value) {
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
index 395821a..834a3ea 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
@@ -108,7 +108,7 @@ public class FetchGroup extends Profiles<FetchGroup> {
         return partContentDescriptors.stream()
                 .filter(descriptor -> path.equals(descriptor.path()))
                 .findFirst()
-                .orElse(new PartContentDescriptor(profiles, path));
+            .orElseGet(() -> new PartContentDescriptor(profiles, path));
     }
 
     @Override
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
index fe0d66f..5fb6637 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
@@ -566,7 +566,7 @@ public class MailboxACL {
             public Builder rights(Right... rights) throws UnsupportedRightException {
                 this.rights =
                     Optional.ofNullable(this.rights)
-                        .orElse(new Rfc4314Rights())
+                        .orElseGet(Rfc4314Rights::new)
                         .union(new Rfc4314Rights(rights));
                 return this;
             }
@@ -703,11 +703,10 @@ public class MailboxACL {
      */
     @SafeVarargs
     public MailboxACL(Map.Entry<EntryKey, Rfc4314Rights>... entries) {
-        this(ImmutableMap.copyOf(
-            Optional.ofNullable(entries)
+        this(Optional.ofNullable(entries)
                 .map(array -> Arrays.stream(array)
                     .collect(Guavate.toImmutableMap(Map.Entry::getKey, Map.Entry::getValue)))
-            .orElse(ImmutableMap.of())));
+                .orElseGet(ImmutableMap::of));
     }
 
     /**
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
index d5ccb2c..b95a055 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
@@ -304,7 +304,7 @@ public class CassandraMessageIdDAO {
             .map(limitAsInt -> selectAllLimited.bind()
                 .setUUID(MAILBOX_ID, mailboxId.asUuid())
                 .setInt(LIMIT, limitAsInt))
-            .orElse(selectAll.bind()
+            .orElseGet(() -> selectAll.bind()
                 .setUUID(MAILBOX_ID, mailboxId.asUuid())));
     }
 
@@ -314,7 +314,7 @@ public class CassandraMessageIdDAO {
                 .setUUID(MAILBOX_ID, mailboxId.asUuid())
                 .setLong(IMAP_UID, uid.asLong())
                 .setInt(LIMIT, limitAsInt))
-            .orElse(selectUidGte.bind()
+            .orElseGet(() -> selectUidGte.bind()
                 .setUUID(MAILBOX_ID, mailboxId.asUuid())
                 .setLong(IMAP_UID, uid.asLong())));
     }
@@ -326,7 +326,7 @@ public class CassandraMessageIdDAO {
                 .setLong(IMAP_UID_GTE, from.asLong())
                 .setLong(IMAP_UID_LTE, to.asLong())
                 .setInt(LIMIT, limitAsInt))
-            .orElse(selectUidRange.bind()
+            .orElseGet(() -> selectUidRange.bind()
                 .setUUID(MAILBOX_ID, mailboxId.asUuid())
                 .setLong(IMAP_UID_GTE, from.asLong())
                 .setLong(IMAP_UID_LTE, to.asLong())));
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java
index a3c7f2f..61b079df 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java
@@ -69,7 +69,7 @@ public class SetAnnotationCommandParser extends AbstractImapCommandParser {
 
             return Optional.ofNullable(value)
                 .map(transforMailboxAnnotation(key))
-                .orElse(MailboxAnnotation.nil(createAnnotationKey(key)));
+                .orElseGet(() -> MailboxAnnotation.nil(createAnnotationKey(key)));
         } catch (IllegalArgumentException e) {
             throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "The key is not valid: " + e.getMessage());
         }
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java
index de4f9af..f6a1c00 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java
@@ -37,13 +37,13 @@ public interface MDCConstants {
         return Optional.ofNullable(session.getUserMailbox())
             .map(Throwing.function(Mailbox::getIdentifier).sneakyThrow())
             .map(id -> MDCBuilder.create().addContext(MAILBOX, id))
-            .orElse(MDCBuilder.create());
+            .orElseGet(MDCBuilder::create);
     }
 
     static MDCBuilder forRequest(Request request) {
         return Optional.ofNullable(request.getArgument())
             .map(argument -> MDCBuilder.create().addContext(ARGUMENT, argument))
-            .orElse(MDCBuilder.create());
+            .orElseGet(MDCBuilder::create);
     }
 
     static MDCBuilder withSession(POP3Session session) {
diff --git a/server/container/util/src/main/java/org/apache/james/util/mime/MessageContentExtractor.java b/server/container/util/src/main/java/org/apache/james/util/mime/MessageContentExtractor.java
index 515c050..7685f54 100644
--- a/server/container/util/src/main/java/org/apache/james/util/mime/MessageContentExtractor.java
+++ b/server/container/util/src/main/java/org/apache/james/util/mime/MessageContentExtractor.java
@@ -218,8 +218,8 @@ public class MessageContentExtractor {
 
         public MessageContent merge(MessageContent fromInnerMultipart) {
             return new MessageContent(
-                    textBody.map(Optional::of).orElse(fromInnerMultipart.getTextBody()),
-                    htmlBody.map(Optional::of).orElse(fromInnerMultipart.getHtmlBody()));
+                    textBody.or(fromInnerMultipart::getTextBody),
+                    htmlBody.or(fromInnerMultipart::getHtmlBody));
         }
 
         public Optional<String> extractMainTextContent(HtmlTextExtractor htmlTextExtractor) {
diff --git a/server/container/util/src/main/java/org/apache/james/util/streams/Limit.java b/server/container/util/src/main/java/org/apache/james/util/streams/Limit.java
index 70ffbbd..7924539 100644
--- a/server/container/util/src/main/java/org/apache/james/util/streams/Limit.java
+++ b/server/container/util/src/main/java/org/apache/james/util/streams/Limit.java
@@ -28,22 +28,23 @@ import com.google.common.base.Preconditions;
 import reactor.core.publisher.Flux;
 
 public class Limit {
+    private static final Limit UNLIMITED = new Limit(Optional.empty());
 
     public static Limit from(int limit) {
         if (limit > 0) {
             return new Limit(Optional.of(limit));
         } else {
-            return unlimited();
+            return UNLIMITED;
         }
     }
 
     public static Limit from(Optional<Integer> limit) {
         return limit.map(Limit::from)
-            .orElse(unlimited());
+            .orElse(UNLIMITED);
     }
 
     public static Limit unlimited() {
-        return new Limit(Optional.empty());
+        return UNLIMITED;
     }
 
     public static Limit limit(int limit) {
diff --git a/server/container/util/src/main/java/org/apache/james/util/streams/Offset.java b/server/container/util/src/main/java/org/apache/james/util/streams/Offset.java
index 109ecae..2230d50 100644
--- a/server/container/util/src/main/java/org/apache/james/util/streams/Offset.java
+++ b/server/container/util/src/main/java/org/apache/james/util/streams/Offset.java
@@ -25,14 +25,15 @@ import java.util.Optional;
 import com.google.common.base.Preconditions;
 
 public class Offset {
+    private static final Offset NONE = new Offset(0);
 
     public static Offset from(Optional<Integer> offset) {
         return offset.map(Offset::from)
-            .orElse(none());
+            .orElse(NONE);
     }
 
     public static Offset none() {
-        return new Offset(0);
+        return NONE;
     }
 
     public static Offset from(int offset) {
diff --git a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
index 8d2d572..99cd5ab 100644
--- a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
+++ b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
@@ -112,7 +112,7 @@ public class DLPDomainConfiguration {
         return removedRulesEvent
             .map(Event::eventId)
             .map(EventId::next)
-            .orElse(history.getNextEventId());
+            .orElseGet(history::getNextEventId);
     }
 
     private Optional<Event> generateRemovedRulesEvent(ImmutableSet<DLPConfigurationItem> existingRules, ImmutableSet<DLPConfigurationItem> updateRulesSet) {
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
index bbff1be..131be03 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
@@ -96,7 +96,7 @@ public class VacationReply {
 
         private String generateNotificationSubject() {
             return Optional.ofNullable(subject)
-                .orElse(context.getRecipient() + " is currently in vacation");
+                .orElseGet(() -> context.getRecipient() + " is currently in vacation");
         }
 
         private Multipart generateNotificationContent() throws MessagingException {
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keyword.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keyword.java
index d3296c2..8251850 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keyword.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keyword.java
@@ -118,7 +118,7 @@ public class Keyword {
     public Flags asFlags() {
         return asSystemFlag()
             .map(Flags::new)
-            .orElse(new Flags(flagName));
+            .orElseGet(() -> new Flags(flagName));
     }
 
     @Override
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/FilterToCriteria.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/FilterToCriteria.java
index b3e4f32..c2adc96 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/FilterToCriteria.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/FilterToCriteria.java
@@ -99,7 +99,7 @@ public class FilterToCriteria {
     private Criterion getFlagCriterion(Keyword keyword, boolean isSet) {
         return keyword.asSystemFlag()
             .map(flag -> SearchQuery.flagSet(flag, isSet))
-            .orElse(SearchQuery.flagSet(keyword.getFlagName(), isSet));
+            .orElseGet(() -> SearchQuery.flagSet(keyword.getFlagName(), isSet));
     }
 
     private Criterion convertOperator(FilterOperator filter) {
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ContentMatcher.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ContentMatcher.java
index 2db7254..fcde255 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ContentMatcher.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ContentMatcher.java
@@ -82,7 +82,7 @@ public interface ContentMatcher {
             AddressHeader addressHeaderToMatch =  HeaderExtractor.toAddressContents(new String[] {valueToMatch})
                 .map(AddressHeader::new)
                 .findAny()
-                .orElse(new AddressHeader(valueToMatch));
+                .orElseGet(() -> new AddressHeader(valueToMatch));
 
             return contents.map(ContentMatcher::asAddressHeader)
                 .anyMatch(addressHeaderToMatch::matchesIgnoreCase);
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPMDCContext.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPMDCContext.java
index fe2c26a..b27242f 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPMDCContext.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPMDCContext.java
@@ -76,6 +76,6 @@ public class IMAPMDCContext {
         return selectedMailbox
             .map(value -> MDCBuilder.create()
                 .addContext("selectedMailbox", value.getMailboxId().serialize()))
-            .orElse(MDCBuilder.create());
+            .orElseGet(MDCBuilder::create);
     }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org