diff --git a/src/main/java/io/ebean/config/ServerConfig.java b/src/main/java/io/ebean/config/ServerConfig.java index e62f4356a..7d83d7c1d 100644 --- a/src/main/java/io/ebean/config/ServerConfig.java +++ b/src/main/java/io/ebean/config/ServerConfig.java @@ -32,6 +32,7 @@ import org.avaje.datasource.DataSourceConfig; import javax.sql.DataSource; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -2689,16 +2690,16 @@ public class ServerConfig { private List getSearchJarsPackages(String searchPackages) { - List hitList = new ArrayList<>(); - if (searchPackages != null) { - String[] entries = StringHelper.splitNames(searchPackages); - for (String entry : entries) { - hitList.add(entry); - } + + List hitList = new ArrayList<>(entries.length); + Collections.addAll(hitList, entries); + + return hitList; + } else { + return new ArrayList<>(); } - return hitList; } /** diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 3a5013b24..2e6a8d8f5 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -1,6 +1,29 @@ package io.ebeaninternal.server.core; -import io.ebean.*; +import io.ebean.AutoTune; +import io.ebean.BackgroundExecutor; +import io.ebean.BeanState; +import io.ebean.CallableSql; +import io.ebean.DocumentStore; +import io.ebean.ExpressionFactory; +import io.ebean.Filter; +import io.ebean.FutureIds; +import io.ebean.FutureList; +import io.ebean.FutureRowCount; +import io.ebean.PagedList; +import io.ebean.PersistenceContextScope; +import io.ebean.Query; +import io.ebean.QueryIterator; +import io.ebean.SqlQuery; +import io.ebean.SqlRow; +import io.ebean.SqlUpdate; +import io.ebean.Transaction; +import io.ebean.TransactionCallback; +import io.ebean.TxScope; +import io.ebean.Update; +import io.ebean.UpdateQuery; +import io.ebean.ValuePair; +import io.ebean.Version; import io.ebean.annotation.TxIsolation; import io.ebean.annotation.TxType; import io.ebean.bean.BeanCollection; @@ -28,8 +51,17 @@ import io.ebean.plugin.Plugin; import io.ebean.plugin.SpiServer; import io.ebean.text.csv.CsvReader; import io.ebean.text.json.JsonContext; -import io.ebeaninternal.api.*; +import io.ebeaninternal.api.LoadBeanRequest; +import io.ebeaninternal.api.LoadManyRequest; +import io.ebeaninternal.api.ScopeTrans; +import io.ebeaninternal.api.ScopedTransaction; +import io.ebeaninternal.api.SpiBackgroundExecutor; +import io.ebeaninternal.api.SpiEbeanServer; +import io.ebeaninternal.api.SpiJsonContext; +import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.api.SpiQuery.Type; +import io.ebeaninternal.api.SpiTransaction; +import io.ebeaninternal.api.TransactionEventTable; import io.ebeaninternal.dbmigration.DdlGenerator; import io.ebeaninternal.dbmigration.ddlgeneration.DdlHandler; import io.ebeaninternal.server.autotune.AutoTuneService; diff --git a/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java b/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java index 627ab77d9..edef4d594 100644 --- a/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java +++ b/src/main/java/io/ebeaninternal/server/core/bootup/ManifestReader.java @@ -8,6 +8,7 @@ import io.ebean.util.StringHelper; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.util.Collections; import java.util.Enumeration; import java.util.HashSet; import java.util.Set; @@ -75,8 +76,6 @@ class ManifestReader { * Collect each individual package splitting by delimiters. */ private void add(String packages) { - for (String pkg : StringHelper.splitNames(packages)) { - packageSet.add(pkg); - } + Collections.addAll(packageSet, StringHelper.splitNames(packages)); } } diff --git a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java index 6bd798368..47a64c6fa 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java +++ b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java @@ -1,6 +1,37 @@ package io.ebeaninternal.server.deploy.parse; -import io.ebean.annotation.*; +import io.ebean.annotation.Aggregation; +import io.ebean.annotation.CreatedTimestamp; +import io.ebean.annotation.DbArray; +import io.ebean.annotation.DbComment; +import io.ebean.annotation.DbDefault; +import io.ebean.annotation.DbHstore; +import io.ebean.annotation.DbJson; +import io.ebean.annotation.DbJsonB; +import io.ebean.annotation.DbMigration; +import io.ebean.annotation.DocCode; +import io.ebean.annotation.DocEmbedded; +import io.ebean.annotation.DocProperty; +import io.ebean.annotation.DocSortable; +import io.ebean.annotation.Draft; +import io.ebean.annotation.DraftDirty; +import io.ebean.annotation.DraftOnly; +import io.ebean.annotation.DraftReset; +import io.ebean.annotation.Encrypted; +import io.ebean.annotation.Expose; +import io.ebean.annotation.Formula; +import io.ebean.annotation.HistoryExclude; +import io.ebean.annotation.Index; +import io.ebean.annotation.JsonIgnore; +import io.ebean.annotation.Length; +import io.ebean.annotation.SoftDelete; +import io.ebean.annotation.TenantId; +import io.ebean.annotation.UnmappedJson; +import io.ebean.annotation.UpdatedTimestamp; +import io.ebean.annotation.WhenCreated; +import io.ebean.annotation.WhenModified; +import io.ebean.annotation.WhoCreated; +import io.ebean.annotation.WhoModified; import io.ebean.config.EncryptDeploy; import io.ebean.config.EncryptDeploy.Mode; import io.ebean.config.dbplatform.DbEncrypt; @@ -289,20 +320,20 @@ public class AnnotationFields extends AnnotationParser { if (get(prop, HistoryExclude.class) != null) { prop.setExcludedFromHistory(); } - + Length length = get(prop, Length.class); if (length != null) { prop.setDbLength(length.value()); } - + io.ebean.annotation.NotNull nonNull = get(prop, io.ebean.annotation.NotNull.class); if (nonNull != null) { prop.setNullable(false); } - + readDbMigration(prop); - + if (validationAnnotations) { NotNull notNull = get(prop, NotNull.class); if (notNull != null && isEbeanValidationGroups(notNull.groups())) { @@ -359,7 +390,7 @@ public class AnnotationFields extends AnnotationParser { if (dbDefault != null) { prop.setDbColumnDefault(dbDefault.value()); } - + Set dbMigration = getAll(prop, DbMigration.class); dbMigration.forEach(ann -> prop.addDbMigrationInfo( new DbMigrationInfo(ann.preAdd(), ann.postAdd(), ann.preAlter(), ann.postAlter(), ann.platforms()))); diff --git a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java index 915f874dc..26ec84885 100644 --- a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java +++ b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java @@ -1,6 +1,19 @@ package io.ebeaninternal.server.expression; -import io.ebean.*; +import io.ebean.CacheMode; +import io.ebean.Expression; +import io.ebean.ExpressionFactory; +import io.ebean.ExpressionList; +import io.ebean.FetchPath; +import io.ebean.FutureIds; +import io.ebean.FutureList; +import io.ebean.FutureRowCount; +import io.ebean.Junction; +import io.ebean.OrderBy; +import io.ebean.PagedList; +import io.ebean.Query; +import io.ebean.QueryIterator; +import io.ebean.Version; import io.ebean.event.BeanQueryRequest; import io.ebean.search.Match; import io.ebean.search.MultiMatch; diff --git a/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java b/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java index 9586bddc6..44ee27cd5 100644 --- a/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java @@ -1,6 +1,18 @@ package io.ebeaninternal.server.expression; -import io.ebean.*; +import io.ebean.CacheMode; +import io.ebean.Expression; +import io.ebean.ExpressionList; +import io.ebean.FetchPath; +import io.ebean.FutureIds; +import io.ebean.FutureList; +import io.ebean.FutureRowCount; +import io.ebean.Junction; +import io.ebean.OrderBy; +import io.ebean.PagedList; +import io.ebean.Query; +import io.ebean.QueryIterator; +import io.ebean.Version; import io.ebean.event.BeanQueryRequest; import io.ebean.search.Match; import io.ebean.search.MultiMatch; diff --git a/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java b/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java index bfcb2012d..7fd56503a 100644 --- a/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java +++ b/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java @@ -1,14 +1,22 @@ package io.ebeaninternal.server.persist; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Utility to improve logging of raw SQL that contains new line characters. */ public class TrimLogSql { + /** + * Statically compiled Regex, to avoid having it be compiled every time it is used. + */ + private static final Pattern LINUX_NEW_LINE_REPLACE_PATTERN = Pattern.compile("\n", Pattern.LITERAL); + /** * Replace new line chars for nicer logging of multi-line sql strings. */ public static String trim(String sql) { - return sql.replace("\n", "\\n "); + return LINUX_NEW_LINE_REPLACE_PATTERN.matcher(sql).replaceAll(Matcher.quoteReplacement("\\n ")); } } diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index 34548edd5..16b1c3bcc 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -1,7 +1,23 @@ package io.ebeaninternal.server.querydefn; -import io.ebean.*; +import io.ebean.CacheMode; +import io.ebean.EbeanServer; +import io.ebean.Expression; +import io.ebean.ExpressionFactory; +import io.ebean.ExpressionList; +import io.ebean.FetchConfig; +import io.ebean.FetchPath; +import io.ebean.FutureIds; +import io.ebean.FutureList; +import io.ebean.FutureRowCount; +import io.ebean.OrderBy; import io.ebean.OrderBy.Property; +import io.ebean.PagedList; +import io.ebean.PersistenceContextScope; +import io.ebean.Query; +import io.ebean.QueryIterator; +import io.ebean.RawSql; +import io.ebean.Version; import io.ebean.bean.CallStack; import io.ebean.bean.ObjectGraphNode; import io.ebean.bean.ObjectGraphOrigin; @@ -9,7 +25,16 @@ import io.ebean.bean.PersistenceContext; import io.ebean.event.BeanQueryRequest; import io.ebean.event.readaudit.ReadEvent; import io.ebean.plugin.BeanType; -import io.ebeaninternal.api.*; +import io.ebeaninternal.api.BindParams; +import io.ebeaninternal.api.CQueryPlanKey; +import io.ebeaninternal.api.HashQuery; +import io.ebeaninternal.api.ManyWhereJoins; +import io.ebeaninternal.api.SpiExpression; +import io.ebeaninternal.api.SpiExpressionList; +import io.ebeaninternal.api.SpiExpressionValidation; +import io.ebeaninternal.api.SpiNamedParam; +import io.ebeaninternal.api.SpiQuery; +import io.ebeaninternal.api.SpiQuerySecondary; import io.ebeaninternal.server.autotune.ProfilingListener; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanPropertyAssocMany; diff --git a/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java b/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java index 19528e979..4db3da3b7 100644 --- a/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java +++ b/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java @@ -130,8 +130,9 @@ public class CsvUtilReader { List allElements = new ArrayList<>(); while (hasNext) { String[] nextLineAsTokens = readNext(); - if (nextLineAsTokens != null) + if (nextLineAsTokens != null) { allElements.add(nextLineAsTokens); + } } return allElements; diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java index 2548fe60b..9673c39c1 100644 --- a/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayList.java @@ -84,7 +84,7 @@ public class ScalarTypeArrayList extends ScalarTypeJsonCollection implemen @SuppressWarnings("unchecked") private List fromArray(Object[] array1) { - List list = new ArrayList(); + List list = new ArrayList(array1.length); for (Object element : array1) { list.add(converter.toElement(element)); }