You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/10/20 00:47:17 UTC

(grails-core) 01/03: refactor(data-mongodb): idiomatic Groovy pass on the java-to-groovy conversion output

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

borinquenkid pushed a commit to branch groovyism/grails-data-mongodb
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit e95034cbf17063a13c247a3bd4464a87c3a8f5ad
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Fri Oct 16 08:52:45 2026 -0500

    refactor(data-mongodb): idiomatic Groovy pass on the java-to-groovy conversion output
    
    Behaviour-preserving idiom cleanup of the Java-to-Groovy conversion's output for
    grails-data-mongodb (bson/core/embedded/spring-data). No public API or behaviour change.
    
    Applied:
    - for (X x : coll) -> for (X x in coll): 69 sites across BsonQuery, MongoDatastore,
      MongoSession, MongoMappingContext, AbstractMongoObectEntityPersister,
      MongoEntityPersister, MongoQuery, AbstractMongoSession, EmbeddedMongoInitializer,
      JsonWriter (a plain colon for-each the converter had left as Java syntax).
    - Collection literals for no-arg constructors (new ArrayList() -> [], new HashMap<>()
      -> [:], new LinkedHashSet<>() -> [] as Set, declared type kept): ~40 sites in
      BsonQuery, MongoDatastore, MongoSession, MongoMappingContext,
      AbstractMongoObectEntityPersister, MongoEntityPersister, MongoQuery,
      EmbeddedMongoInitializer. Copy-constructor and sized-capacity call sites left alone.
    - String/boxed .equals( -> ==, Objects.equals(a, b) -> a == b: MongoDatastore (index
      name/connection-source/TTL/text-key comparisons), AbstractMongoObectEntityPersister
      (isDirty), MongoQuery (identity-property name check), ReplicaSetInitiator
      (errorCode, Boolean.TRUE primary check). Verified every operand pair is same-typed
      Strings or non-numeric before converting; left Arrays.asList/getKey().equals cases
      that touch raw Objects or fixed-size array views.
    - Property syntax for verified collision-free accessors: JsonReader/JsonWriter's
      inherited AbstractBsonReader/AbstractBsonWriter state/context/currentBsonType/name
      accessors (checked via javap against org.mongodb:bson for isX/getX pairs before
      touching any of them); BsonBinary.type/.data, BsonRegularExpression.pattern/options;
      RestartableMongoClient's five no-arg MongoClient/MongoCluster delegate getters;
      MongoCommandException.errorCode; Spring's ResourceHolderSupport
      (synchronizedWithTransaction, isX-only, no getX pair); MongoQuery.Near's redundant
      hand-written setMaxDistance(Distance) removed in favour of the property Groovy
      already generates for the field, with its two call sites in Near/NearSphere
      switched to property assignment.
    - instanceof + redundant cast on a local -> flow-typed call: WithinBox/WithinCircle's
      Box/Circle argument, Near/NearSphere's Number argument, MongoQuery's ToOne property.
    - Minor cleanup: dropped unneeded `this.` on unshadowed fields in AbstractMongoSession;
      `.getMessage()` -> `.message` (JsonReader, MongoTransaction).
    
    Deliberately left (Tier B exclusions, all confirmed by reading the accessor or by
    javap before deciding):
    - Every EmbeddedMongoSettings accessor (getPort/getVersion/getDatabaseDir/
      getReplicaSet/isPersistent/isReplicaSet) kept as explicit method calls everywhere
      they're called (FlapdoodleMongoBackend, InMemoryMongoBackend): the class's own
      equals() documents that getReplicaSet()/isReplicaSet() is a genuine isX/getX
      collision, and each has javadoc that would be lost by converting to a property.
    - JsonReader/JsonWriter's getContext()/getContextType() re-declarations and the
      `this.@field` direct access in their Mark/Context inner classes: left exactly as
      converted, since each exists only to reach a protected member across the inner/outer
      class boundary the comments explain.
    - JsonWriter.Context is not @CompileStatic (confirmed by javap: its .hasElements
      write still compiles to ScriptBytecodeAdapter.setGroovyObjectProperty); pre-existing,
      not introduced by this pass, so left alone rather than papering over it with a cast.
    - JsonScanner, JsonTokenType, EmbeddedQueryEncoder, IndexBuildResult, MissingIndex,
      UndeclaredIndex, WithinPolygon, MongoIdCoercion, EmbeddedMongoBackend,
      EmbeddedMongoSettings, EmbeddedMongoLifecycle, FlapdoodleMongoBackend,
      InMemoryMongoBackend, RunningEmbeddedMongo, ContextStoppedServerApplication:
      read in full, already idiomatic (records, interfaces, or already using property
      syntax/collection literals/this.is() correctly) - left unchanged.
    - JsonReader/JsonScanner/JsonWriter's hand-rolled char-based tokenizer loops: no
      loop-level rewrites, per the hot-path rule; only null-safety/accessor idioms touched.
    - `MongoDatastore.options` ternary (new HashMap<>(rawOptions) : new HashMap<>()) left
      as-is rather than converting only one arm.
    - AbstractMongoObectEntityPersister's Arrays.asList(keys) kept: fixed-size array view
      passed to a method this file doesn't control.
    - No wholesale getter/setter property-syntax sweep of MongoDatastore (2.9k lines),
      MongoSession, MongoQuery (1.7k lines), AbstractMongoObectEntityPersister or
      MongoEntityPersister beyond the sites above: verifying every cross-module
      PersistentEntity/PersistentProperty/Criterion accessor for isX/getX collisions at
      that volume was out of scope for one pass: left as explicit method calls.
    
    Verification:
    - grails-data-mongodb-bson: compileGroovy/compileTestGroovy clean; test 323/0;
      codenarcMain/codenarcTest/checkstyleMain clean (0 violations, checkstyle NO-SOURCE:
      no Java sources).
    - grails-data-mongodb-core: compileGroovy/compileTestGroovy clean; test 413/0
      (includes the TCK suite against the in-memory embedded backend);
      codenarcMain/codenarcTest/checkstyleMain clean (checkstyle NO-SOURCE).
    - grails-data-mongodb-embedded: compileGroovy/compileTestGroovy clean; test 161/0;
      codenarcMain/codenarcTest/checkstyleMain clean (checkstyle NO-SOURCE).
    - grails-data-mongodb-spring-data: compileGroovy/compileTestGroovy clean; test 60/0;
      codenarcMain/codenarcTest/checkstyleMain clean (1 file, 0 violations).
    - javap dynamic-dispatch audit on JsonReader, JsonWriter, RestartableMongoClient,
      MongoQuery, MongoDatastore, EmbeddedMongoInitializer: only initMetaClass/
      compareEqual/compareNotEqual (harmless) plus the three pre-existing, unrelated
      setGroovyObjectProperty sites noted above; none in code this pass touched.
    
    Co-Authored-By: Claude Sonnet 5 <no...@anthropic.com>
---
 .../grails/datastore/bson/json/JsonReader.groovy   | 118 ++++++++++-----------
 .../grails/datastore/bson/json/JsonToken.groovy    |  12 +--
 .../grails/datastore/bson/json/JsonWriter.groovy   |  82 +++++++-------
 .../grails/datastore/bson/query/BsonQuery.groovy   |  28 ++---
 .../gorm/mongo/MongoCriteriaBuilder.groovy         |   2 +-
 .../org/grails/datastore/gorm/mongo/Near.groovy    |   4 +-
 .../grails/datastore/gorm/mongo/NearSphere.groovy  |   4 +-
 .../grails/datastore/gorm/mongo/WithinBox.groovy   |   2 +-
 .../datastore/gorm/mongo/WithinCircle.groovy       |   2 +-
 .../mapping/mongo/AbstractMongoSession.groovy      |  12 +--
 .../datastore/mapping/mongo/MongoDatastore.groovy  |  40 +++----
 .../datastore/mapping/mongo/MongoSession.groovy    |  40 +++----
 .../mapping/mongo/MongoTransaction.groovy          |   4 +-
 .../mongo/config/MongoMappingContext.groovy        |   6 +-
 .../connections/RestartableMongoClient.groovy      |  10 +-
 .../AbstractMongoObectEntityPersister.groovy       |  30 +++---
 .../mongo/engine/MongoEntityPersister.groovy       |  18 ++--
 .../mapping/mongo/query/MongoQuery.groovy          |  64 ++++++-----
 .../embedded/EmbeddedMongoInitializer.groovy       |  22 ++--
 .../mongodb/embedded/ReplicaSetInitiator.groovy    |   4 +-
 .../mongodb/GormSpringDataSessionSupport.groovy    |   2 +-
 21 files changed, 247 insertions(+), 259 deletions(-)

diff --git a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonReader.groovy b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonReader.groovy
index 2db09ab0c6..949dddb2ca 100644
--- a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonReader.groovy
+++ b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonReader.groovy
@@ -61,7 +61,7 @@ class JsonReader extends AbstractBsonReader {
     JsonReader(final Reader reader) {
         super()
         scanner = new JsonScanner(reader)
-        setContext(new Context(null, BsonContextType.TOP_LEVEL))
+        context = new Context(null, BsonContextType.TOP_LEVEL)
     }
 
     @Override
@@ -71,12 +71,12 @@ class JsonReader extends AbstractBsonReader {
 
     @Override
     protected byte doPeekBinarySubType() {
-        return doReadBinaryData().getType()
+        return doReadBinaryData().type
     }
 
     @Override
     protected int doPeekBinarySize() {
-        return doReadBinaryData().getData().length
+        return doReadBinaryData().data.length
     }
 
     @Override
@@ -86,90 +86,90 @@ class JsonReader extends AbstractBsonReader {
 
     @Override
     BsonType readBsonType() {
-        if (isClosed()) {
+        if (closed) {
             throw new IllegalStateException('This instance has been closed')
         }
-        if (getState() == State.INITIAL || getState() == State.DONE || getState() == State.SCOPE_DOCUMENT) {
+        if (state == State.INITIAL || state == State.DONE || state == State.SCOPE_DOCUMENT) {
             // in JSON the top level value can be of any type so fall through
-            setState(State.TYPE)
+            state = State.TYPE
         }
-        if (getState() != State.TYPE) {
+        if (state != State.TYPE) {
             throwInvalidState('readBSONType', State.TYPE)
         }
 
-        if (getContext().getContextType() == BsonContextType.DOCUMENT) {
+        if (context.contextType == BsonContextType.DOCUMENT) {
             JsonToken nameToken = popToken()
-            switch (nameToken.getType()) {
+            switch (nameToken.type) {
                 case JsonTokenType.STRING:
                 case JsonTokenType.UNQUOTED_STRING:
-                    setCurrentName(nameToken.getValue(String))
+                    currentName = nameToken.getValue(String)
                     break
                 case JsonTokenType.END_OBJECT:
-                    setState(State.END_OF_DOCUMENT)
+                    state = State.END_OF_DOCUMENT
                     return BsonType.END_OF_DOCUMENT
                 default:
-                    throw new JsonParseException("JSON reader was expecting a name but found '%s'.", nameToken.getValue())
+                    throw new JsonParseException("JSON reader was expecting a name but found '%s'.", nameToken.value)
             }
 
             JsonToken colonToken = popToken()
-            if (colonToken.getType() != JsonTokenType.COLON) {
-                throw new JsonParseException("JSON reader was expecting ':' but found '%s'.", colonToken.getValue())
+            if (colonToken.type != JsonTokenType.COLON) {
+                throw new JsonParseException("JSON reader was expecting ':' but found '%s'.", colonToken.value)
             }
         }
 
         JsonToken token = popToken()
-        if (getContext().getContextType() == BsonContextType.ARRAY && token.getType() == JsonTokenType.END_ARRAY) {
-            setState(State.END_OF_ARRAY)
+        if (context.contextType == BsonContextType.ARRAY && token.type == JsonTokenType.END_ARRAY) {
+            state = State.END_OF_ARRAY
             return BsonType.END_OF_DOCUMENT
         }
 
         boolean noValueFound = false
-        switch (token.getType()) {
+        switch (token.type) {
             case JsonTokenType.BEGIN_ARRAY:
-                setCurrentBsonType(BsonType.ARRAY)
+                currentBsonType = BsonType.ARRAY
                 break
             case JsonTokenType.BEGIN_OBJECT:
                 visitExtendedJSON()
                 break
             case JsonTokenType.DOUBLE:
-                setCurrentBsonType(BsonType.DOUBLE)
-                currentValue = token.getValue()
+                currentBsonType = BsonType.DOUBLE
+                currentValue = token.value
                 break
             case JsonTokenType.END_OF_FILE:
-                setCurrentBsonType(BsonType.END_OF_DOCUMENT)
+                currentBsonType = BsonType.END_OF_DOCUMENT
                 break
             case JsonTokenType.INT32:
-                setCurrentBsonType(BsonType.INT32)
-                currentValue = token.getValue()
+                currentBsonType = BsonType.INT32
+                currentValue = token.value
                 break
             case JsonTokenType.INT64:
-                setCurrentBsonType(BsonType.INT64)
-                currentValue = token.getValue()
+                currentBsonType = BsonType.INT64
+                currentValue = token.value
                 break
             case JsonTokenType.REGULAR_EXPRESSION:
-                setCurrentBsonType(BsonType.REGULAR_EXPRESSION)
-                currentValue = token.getValue()
+                currentBsonType = BsonType.REGULAR_EXPRESSION
+                currentValue = token.value
                 break
             case JsonTokenType.STRING:
-                setCurrentBsonType(BsonType.STRING)
-                currentValue = token.getValue()
+                currentBsonType = BsonType.STRING
+                currentValue = token.value
                 break
             case JsonTokenType.UNQUOTED_STRING:
                 String value = token.getValue(String)
 
                 if (JsonToken.BOOLEAN_FALSE == value || JsonToken.BOOLEAN_TRUE == value) {
-                    setCurrentBsonType(BsonType.BOOLEAN)
+                    currentBsonType = BsonType.BOOLEAN
                     currentValue = Boolean.parseBoolean(value)
                 } else if ('Infinity' == value) {
-                    setCurrentBsonType(BsonType.DOUBLE)
+                    currentBsonType = BsonType.DOUBLE
                     currentValue = Double.POSITIVE_INFINITY
                 } else if ('NaN' == value) {
-                    setCurrentBsonType(BsonType.DOUBLE)
+                    currentBsonType = BsonType.DOUBLE
                     currentValue = Double.NaN
                 } else if (JsonToken.NULL == value) {
-                    setCurrentBsonType(BsonType.NULL)
+                    currentBsonType = BsonType.NULL
                 } else if ('undefined' == value) {
-                    setCurrentBsonType(BsonType.UNDEFINED)
+                    currentBsonType = BsonType.UNDEFINED
                 } else {
                     noValueFound = true
                 }
@@ -179,28 +179,28 @@ class JsonReader extends AbstractBsonReader {
                 break
         }
         if (noValueFound) {
-            throw new JsonParseException("JSON reader was expecting a value but found '%s'.", token.getValue())
+            throw new JsonParseException("JSON reader was expecting a value but found '%s'.", token.value)
         }
 
-        if (getContext().getContextType() == BsonContextType.ARRAY || getContext().getContextType() == BsonContextType.DOCUMENT) {
+        if (context.contextType == BsonContextType.ARRAY || context.contextType == BsonContextType.DOCUMENT) {
             JsonToken commaToken = popToken()
-            if (commaToken.getType() != JsonTokenType.COMMA) {
+            if (commaToken.type != JsonTokenType.COMMA) {
                 pushToken(commaToken)
             }
         }
 
-        switch (getContext().getContextType()) {
+        switch (context.contextType) {
             case BsonContextType.ARRAY:
             case BsonContextType.JAVASCRIPT_WITH_SCOPE:
             case BsonContextType.TOP_LEVEL:
-                setState(State.VALUE)
+                state = State.VALUE
                 break
             default:
                 // DOCUMENT, SCOPE_DOCUMENT and anything else
-                setState(State.NAME)
+                state = State.NAME
                 break
         }
-        return getCurrentBsonType()
+        return currentBsonType
     }
 
     @Override
@@ -215,11 +215,11 @@ class JsonReader extends AbstractBsonReader {
 
     @Override
     protected void doReadEndArray() {
-        setContext(getContext().getParentContext())
+        context = context.parentContext
 
-        if (getContext().getContextType() == BsonContextType.ARRAY || getContext().getContextType() == BsonContextType.DOCUMENT) {
+        if (context.contextType == BsonContextType.ARRAY || context.contextType == BsonContextType.DOCUMENT) {
             JsonToken commaToken = popToken()
-            if (commaToken.getType() != JsonTokenType.COMMA) {
+            if (commaToken.type != JsonTokenType.COMMA) {
                 pushToken(commaToken)
             }
         }
@@ -227,19 +227,19 @@ class JsonReader extends AbstractBsonReader {
 
     @Override
     protected void doReadEndDocument() {
-        setContext(getContext().getParentContext())
-        if (getContext() != null && getContext().getContextType() == BsonContextType.SCOPE_DOCUMENT) {
-            setContext(getContext().getParentContext()) // JavaScriptWithScope
+        context = context.parentContext
+        if (context != null && context.contextType == BsonContextType.SCOPE_DOCUMENT) {
+            context = context.parentContext // JavaScriptWithScope
             verifyToken(JsonToken.CLOSE_BRACE) // outermost closing bracket for JavaScriptWithScope
         }
 
-        if (getContext() == null) {
+        if (context == null) {
             throw new JsonParseException('Unexpected end of document.')
         }
 
-        if (getContext().getContextType() == BsonContextType.ARRAY || getContext().getContextType() == BsonContextType.DOCUMENT) {
+        if (context.contextType == BsonContextType.ARRAY || context.contextType == BsonContextType.DOCUMENT) {
             JsonToken commaToken = popToken()
-            if (commaToken.getType() != JsonTokenType.COMMA) {
+            if (commaToken.type != JsonTokenType.COMMA) {
                 pushToken(commaToken)
             }
         }
@@ -302,12 +302,12 @@ class JsonReader extends AbstractBsonReader {
 
     @Override
     protected void doReadStartArray() {
-        setContext(new Context(getContext(), BsonContextType.ARRAY))
+        context = new Context(context, BsonContextType.ARRAY)
     }
 
     @Override
     protected void doReadStartDocument() {
-        setContext(new Context(getContext(), BsonContextType.DOCUMENT))
+        context = new Context(context, BsonContextType.DOCUMENT)
     }
 
     @Override
@@ -337,7 +337,7 @@ class JsonReader extends AbstractBsonReader {
 
     @Override
     protected void doSkipValue() {
-        switch (getCurrentBsonType()) {
+        switch (currentBsonType) {
             case BsonType.ARRAY:
                 readStartArray()
                 while (readBsonType() != BsonType.END_OF_DOCUMENT) {
@@ -427,7 +427,7 @@ class JsonReader extends AbstractBsonReader {
         try {
             return scanner.nextToken()
         } catch (IOException e) {
-            throw new JsonParseException('Cannot parse JSON due to IO error: ' + e.getMessage(), e)
+            throw new JsonParseException('Cannot parse JSON due to IO error: ' + e.message, e)
         }
     }
 
@@ -444,8 +444,8 @@ class JsonReader extends AbstractBsonReader {
             throw new IllegalArgumentException("Can't be null")
         }
         JsonToken token = popToken()
-        if (!expected.equals(token.getValue())) {
-            throw new JsonParseException("JSON reader expected '%s' but found '%s'.", expected, token.getValue())
+        if (!expected.equals(token.value)) {
+            throw new JsonParseException("JSON reader expected '%s' but found '%s'.", expected, token.value)
         }
     }
 
@@ -453,7 +453,7 @@ class JsonReader extends AbstractBsonReader {
         JsonToken nameToken = popToken()
 
         pushToken(nameToken)
-        setCurrentBsonType(BsonType.DOCUMENT)
+        currentBsonType = BsonType.DOCUMENT
     }
 
     @Override
@@ -497,9 +497,9 @@ class JsonReader extends AbstractBsonReader {
             try {
                 JsonReader.this.scanner.reader.reset()
             } catch (IOException e) {
-                throw new JsonParseException('Failed to reset reader: ' + e.getMessage(), e)
+                throw new JsonParseException('Failed to reset reader: ' + e.message, e)
             }
-            JsonReader.this.resetContext(getParentContext(), getContextType())
+            JsonReader.this.resetContext(parentContext, contextType)
         }
 
     }
diff --git a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonToken.groovy b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonToken.groovy
index 26e98d3256..256405bf9e 100644
--- a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonToken.groovy
+++ b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonToken.groovy
@@ -43,18 +43,14 @@ class JsonToken {
     @PackageScope static final char NEW_LINE = '\n'
     @PackageScope static final char QUOTE = '"'
 
-    private final Object value
-    private final JsonTokenType type
+    final Object value
+    final JsonTokenType type
 
     JsonToken(final JsonTokenType type, final Object value) {
         this.value = value
         this.type = type
     }
 
-    Object getValue() {
-        return value
-    }
-
     def <T> T getValue(final Class<T> clazz) {
         if (Long == clazz) {
             if (value instanceof Integer) {
@@ -71,8 +67,4 @@ class JsonToken {
         }
     }
 
-    JsonTokenType getType() {
-        return type
-    }
-
 }
diff --git a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.groovy b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.groovy
index bb607ced74..7eca6860a0 100644
--- a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.groovy
+++ b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.groovy
@@ -63,11 +63,11 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteStartDocument() {
         try {
-            if (getState() == State.VALUE || getState() == State.SCOPE_DOCUMENT) {
-                writeNameHelper(getName())
+            if (state == State.VALUE || state == State.SCOPE_DOCUMENT) {
+                writeNameHelper(name)
             }
-            BsonContextType contextType = (getState() == State.SCOPE_DOCUMENT) ? BsonContextType.SCOPE_DOCUMENT : BsonContextType.DOCUMENT
-            setContext(new Context(getContext(), contextType, settings.getIndentCharacters()))
+            BsonContextType contextType = (state == State.SCOPE_DOCUMENT) ? BsonContextType.SCOPE_DOCUMENT : BsonContextType.DOCUMENT
+            context = new Context(context, contextType, settings.indentCharacters)
 
             writer.write(JsonToken.OPEN_BRACE)
         } catch (IOException e) {
@@ -79,11 +79,11 @@ class JsonWriter extends AbstractBsonWriter {
     protected void doWriteEndDocument() {
         try {
             writer.write(JsonToken.CLOSE_BRACE)
-            if (getContext().getContextType() == BsonContextType.SCOPE_DOCUMENT) {
-                setContext(getContext().getParentContext())
+            if (context.contextType == BsonContextType.SCOPE_DOCUMENT) {
+                context = context.parentContext
                 writeEndDocument()
             } else {
-                setContext(getContext().getParentContext())
+                context = context.parentContext
             }
         } catch (IOException e) {
             throwBsonException(e)
@@ -93,9 +93,9 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteStartArray() {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(JsonToken.OPEN_BRACKET)
-            setContext(new Context(getContext(), BsonContextType.ARRAY, settings.getIndentCharacters()))
+            context = new Context(context, BsonContextType.ARRAY, settings.indentCharacters)
         } catch (IOException e) {
             throwBsonException(e)
         }
@@ -108,16 +108,16 @@ class JsonWriter extends AbstractBsonWriter {
         } catch (IOException e) {
             throwBsonException(e)
         }
-        setContext(getContext().getParentContext())
+        context = context.parentContext
     }
 
     @Override
     protected void doWriteBinaryData(BsonBinary value) {
         try {
-            writeNameHelper(getName())
-            byte[] data = value.getData()
+            writeNameHelper(name)
+            byte[] data = value.data
             writer.write(Base64.getEncoder().encodeToString(data))
-            setState(getNextState())
+            state = nextState
         } catch (IOException e) {
             throwBsonException(e)
         }
@@ -126,9 +126,9 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteBoolean(boolean value) {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(value ? JsonToken.BOOLEAN_TRUE : JsonToken.BOOLEAN_FALSE)
-            setState(getNextState())
+            state = nextState
         } catch (IOException e) {
             throwBsonException(e)
         }
@@ -137,14 +137,14 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteDateTime(long value) {
         DateFormat df = new SimpleDateFormat(ISO_8601)
-        df.setTimeZone(UTC)
+        df.timeZone = UTC
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(JsonToken.QUOTE)
             Date date = new Date(value)
             writer.write(df.format(date))
             writer.write(JsonToken.QUOTE)
-            setState(getNextState())
+            state = nextState
         } catch (IOException e) {
             throwBsonException(e)
         }
@@ -158,9 +158,9 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteDouble(double value) {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(Double.toString(value))
-            setState(getNextState())
+            state = nextState
         } catch (IOException e) {
             throwBsonException(e)
         }
@@ -169,7 +169,7 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteInt32(int value) {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(Integer.toString(value))
         } catch (IOException e) {
             throwBsonException(e)
@@ -179,7 +179,7 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteInt64(long value) {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             if (value >= Integer.MIN_VALUE && value <= Integer.MAX_VALUE) {
                 writer.write(Long.toString(value))
             } else {
@@ -195,7 +195,7 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteDecimal128(Decimal128 value) {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(JsonToken.QUOTE)
             writer.write(value.toString())
             writer.write(JsonToken.QUOTE)
@@ -227,7 +227,7 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteNull() {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(JsonToken.NULL)
         } catch (IOException e) {
             throwBsonException(e)
@@ -237,7 +237,7 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteObjectId(ObjectId value) {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write(value.toString())
         } catch (IOException e) {
             throwBsonException(e)
@@ -247,21 +247,21 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteRegularExpression(BsonRegularExpression regularExpression) {
         try {
-            switch (settings.getOutputMode()) {
+            switch (settings.outputMode) {
                 case JsonMode.STRICT:
                     writeStartDocument()
-                    writeString('$regex', regularExpression.getPattern())
-                    writeString('$options', regularExpression.getOptions())
+                    writeString('$regex', regularExpression.pattern)
+                    writeString('$options', regularExpression.options)
                     writeEndDocument()
                     break
                 default:
-                    writeNameHelper(getName())
+                    writeNameHelper(name)
                     writer.write(JsonToken.FORWARD_SLASH)
-                    String escaped = (regularExpression.getPattern() == '') ? '(?:)' : regularExpression.getPattern()
+                    String escaped = (regularExpression.pattern == '') ? '(?:)' : regularExpression.pattern
                             .replace('/', '\\/')
                     writer.write(escaped)
                     writer.write(JsonToken.FORWARD_SLASH)
-                    writer.write(regularExpression.getOptions())
+                    writer.write(regularExpression.options)
                     break
             }
         } catch (IOException e) {
@@ -272,7 +272,7 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteString(final String value) {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writeStringHelper(value)
         } catch (IOException e) {
             throwBsonException(e)
@@ -292,7 +292,7 @@ class JsonWriter extends AbstractBsonWriter {
     @Override
     protected void doWriteUndefined() {
         try {
-            writeNameHelper(getName())
+            writeNameHelper(name)
             writer.write('undefined')
         } catch (IOException e) {
             throwBsonException(e)
@@ -309,21 +309,21 @@ class JsonWriter extends AbstractBsonWriter {
     }
 
     protected void writeNameHelper(final String name) throws IOException {
-        switch (getContext().getContextType()) {
+        switch (context.contextType) {
             case BsonContextType.ARRAY:
                 // don't write Array element names in JSON
-                if (getContext().hasElements) {
+                if (context.hasElements) {
                     writer.write(JsonToken.COMMA)
                 }
                 break
             case BsonContextType.DOCUMENT:
             case BsonContextType.SCOPE_DOCUMENT:
-                if (getContext().hasElements) {
+                if (context.hasElements) {
                     writer.write(JsonToken.COMMA)
                 }
-                if (settings.isIndent()) {
-                    writer.write(settings.getNewLineCharacters())
-                    writer.write(getContext().indentation)
+                if (settings.indent) {
+                    writer.write(settings.newLineCharacters)
+                    writer.write(context.indentation)
                 }
                 writeStringHelper(name)
                 writer.write(JsonToken.COLON)
@@ -334,7 +334,7 @@ class JsonWriter extends AbstractBsonWriter {
                 throw new BSONException('Invalid contextType.')
         }
 
-        getContext().hasElements = true
+        context.hasElements = true
     }
 
     private void throwBsonException(IOException e) {
@@ -348,7 +348,7 @@ class JsonWriter extends AbstractBsonWriter {
 
     private void writeStringHelper(final String str) throws IOException {
         writer.write('"')
-        for (final char c : str.toCharArray()) {
+        for (final char c in str.toCharArray()) {
             switch (c) {
                 case ('"' as char):
                     writer.write('\\"')
diff --git a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/query/BsonQuery.groovy b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/query/BsonQuery.groovy
index 2d0ac3e202..482d966db9 100644
--- a/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/query/BsonQuery.groovy
+++ b/grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/query/BsonQuery.groovy
@@ -120,18 +120,18 @@ abstract class BsonQuery extends Query {
     private static final String THIS_PREFIX = 'this.'
     /** Matches MongoDB's own document nesting limit, so no value the server would accept is refused. */
     private static final int MAX_CRITERION_VALUE_DEPTH = 100
-    protected static Map<Class, QueryHandler> queryHandlers = new HashMap<>()
-    protected static Map<String, OperatorHandler> operatorHandlers = new HashMap<>()
-    protected static Map<Class, ProjectionHandler> groupByProjectionHandlers = new HashMap<>()
+    protected static Map<Class, QueryHandler> queryHandlers = [:]
+    protected static Map<String, OperatorHandler> operatorHandlers = [:]
+    protected static Map<Class, ProjectionHandler> groupByProjectionHandlers = [:]
 
-    protected static Map<Class, ProjectionHandler> projectProjectionHandlers = new HashMap<>()
+    protected static Map<Class, ProjectionHandler> projectProjectionHandlers = [:]
 
     /**
      * Criterion types whose values are shapes or nested queries by design and are therefore not
      * subject to {@link #validateCriterionValues(Criterion, PersistentEntity)}. Subclasses register
      * their own exemptions here, the same way they register query handlers.
      */
-    protected static final Set<Class<? extends Criterion>> VALUE_VALIDATION_EXEMPT_CRITERIA = new HashSet<>()
+    protected static final Set<Class<? extends Criterion>> VALUE_VALIDATION_EXEMPT_CRITERIA = [] as Set
 
     static {
         VALUE_VALIDATION_EXEMPT_CRITERIA.add(SubqueryCriterion)
@@ -326,9 +326,9 @@ abstract class BsonQuery extends Query {
 
         queryHandlers.put(Negation, new QueryHandler<Negation>() {
             void handle(EmbeddedQueryEncoder queryEncoder, Negation criteria, Document query, PersistentEntity entity) {
-                List nor = new ArrayList()
+                List nor = []
                 query.put(NOR_OPERATOR, nor)
-                for (Criterion criterion : criteria.getCriteria()) {
+                for (Criterion criterion in criteria.getCriteria()) {
                     Document negatedQuery = new Document()
                     nor.add(negatedQuery)
                     if (criterion instanceof PropertyCriterion) {
@@ -540,7 +540,7 @@ abstract class BsonQuery extends Query {
 
     @PackageScope
     static List readArrayOfValues(BsonReader queryReader) {
-        List values = new ArrayList()
+        List values = []
         BsonType bsonType = queryReader.getCurrentBsonType()
         if (bsonType == BsonType.ARRAY) {
             queryReader.readStartArray()
@@ -800,7 +800,7 @@ abstract class BsonQuery extends Query {
     protected static List<Object> getInListQueryValues(PersistentEntity entity, In inCriterion) {
         List<Object> values = new ArrayList<Object>(inCriterion.getValues().size())
         final MappingContext mappingContext = entity.getMappingContext()
-        for (Object value : inCriterion.getValues()) {
+        for (Object value in inCriterion.getValues()) {
             if (mappingContext.isPersistentEntity(value)) {
                 PersistentEntity pe = mappingContext.getPersistentEntity(
                         value.getClass().getName())
@@ -987,7 +987,7 @@ abstract class BsonQuery extends Query {
     protected static void populateBsonQuery(final EmbeddedQueryEncoder queryEncoder, Document query, List<Criterion> criteria, final PersistentEntity entity) {
         // if a query combines more than 1 item, wrap the items in individual $and or $or arguments
         // so that property names can't clash (e.g. for an $and containing two $ors)
-        for (Criterion criterion : criteria) {
+        for (Criterion criterion in criteria) {
             validateCriterionValues(criterion, entity)
             final QueryHandler queryHandler = queryHandlers.get(criterion.getClass())
             if (queryHandler != null) {
@@ -1013,17 +1013,17 @@ abstract class BsonQuery extends Query {
     protected static void populateBsonQuery(final EmbeddedQueryEncoder queryEncoder, Document query, Junction criteria, final PersistentEntity entity) {
         List subList = null
         if (criteria instanceof Disjunction) {
-            subList = new ArrayList()
+            subList = []
             query.put(OR_OPERATOR, subList)
         } else if (criteria instanceof Conjunction) {
-            subList = new ArrayList()
+            subList = []
             query.put(AND_OPERATOR, subList)
         } else if (criteria instanceof Negation) {
-            subList = new ArrayList()
+            subList = []
             query.put(NOT_OPERATOR, new Document(OR_OPERATOR, subList))
         }
 
-        for (Criterion criterion : criteria.getCriteria()) {
+        for (Criterion criterion in criteria.getCriteria()) {
             validateCriterionValues(criterion, entity)
             final QueryHandler queryHandler = queryHandlers.get(criterion.getClass())
             if (queryHandler != null) {
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/MongoCriteriaBuilder.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/MongoCriteriaBuilder.groovy
index cf7d780f02..4a770f92cf 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/MongoCriteriaBuilder.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/MongoCriteriaBuilder.groovy
@@ -274,7 +274,7 @@ class MongoCriteriaBuilder extends CriteriaBuilder {
     }
 
     Criteria arguments(Map arguments) {
-        ((QueryArgumentsAware) this.query).setArguments(arguments)
+        ((QueryArgumentsAware) query).arguments = arguments
         return this
     }
 
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/Near.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/Near.groovy
index 427f04369e..ab605c9664 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/Near.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/Near.groovy
@@ -41,9 +41,9 @@ class Near extends MethodExpression {
         if (arguments.length > 1) {
             Object o = arguments[1]
             if (o instanceof Number) {
-                near.setMaxDistance(Distance.valueOf(((Number) o).doubleValue()))
+                near.maxDistance = Distance.valueOf(o.doubleValue())
             } else {
-                near.setMaxDistance((Distance) o)
+                near.maxDistance = (Distance) o
             }
         }
         return near
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/NearSphere.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/NearSphere.groovy
index bf3879e15c..e61501fd42 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/NearSphere.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/NearSphere.groovy
@@ -40,9 +40,9 @@ class NearSphere extends Near {
         if (arguments.length > 1) {
             Object o = arguments[1]
             if (o instanceof Number) {
-                near.setMaxDistance(Distance.valueOf(((Number) o).doubleValue()))
+                near.maxDistance = Distance.valueOf(o.doubleValue())
             } else {
-                near.setMaxDistance((Distance) o)
+                near.maxDistance = (Distance) o
             }
         }
         return near
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinBox.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinBox.groovy
index 55ff6d0883..48483782ea 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinBox.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinBox.groovy
@@ -40,7 +40,7 @@ class WithinBox extends MethodExpression {
     Criterion createCriterion() {
         Object argument = arguments[0]
         if (argument instanceof Box) {
-            return new MongoQuery.WithinBox(propertyName, ((Box) argument).asList())
+            return new MongoQuery.WithinBox(propertyName, argument.asList())
         }
         return new MongoQuery.WithinBox(propertyName, (List) argument)
     }
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinCircle.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinCircle.groovy
index 62b0326772..abde9b4ab0 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinCircle.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/gorm/mongo/WithinCircle.groovy
@@ -44,7 +44,7 @@ class WithinCircle extends MethodExpression {
     Criterion createCriterion() {
         Object argument = arguments[0]
         if (argument instanceof Circle) {
-            return new MongoQuery.WithinCircle(propertyName, ((Circle) argument).asList())
+            return new MongoQuery.WithinCircle(propertyName, argument.asList())
         }
         return new MongoQuery.WithinCircle(propertyName, (List) argument)
     }
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/AbstractMongoSession.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/AbstractMongoSession.groovy
index 7afc00c4fc..3147d39625 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/AbstractMongoSession.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/AbstractMongoSession.groovy
@@ -74,7 +74,7 @@ abstract class AbstractMongoSession extends AbstractSession<MongoClient> {
     AbstractMongoSession(MongoDatastore datastore, MappingContext mappingContext, ApplicationEventPublisher publisher, boolean stateless) {
         super(datastore, mappingContext, publisher, stateless)
         mongoDatastore = datastore
-        this.defaultDatabase = getDocumentMappingContext().getDefaultDatabaseName()
+        defaultDatabase = getDocumentMappingContext().getDefaultDatabaseName()
     }
 
     @Override
@@ -90,7 +90,7 @@ abstract class AbstractMongoSession extends AbstractSession<MongoClient> {
 
     @Override
     void flush() {
-        flush(this.getWriteConcern())
+        flush(getWriteConcern())
     }
 
     abstract void flush(WriteConcern writeConcern)
@@ -131,7 +131,7 @@ abstract class AbstractMongoSession extends AbstractSession<MongoClient> {
     }
 
     WriteConcern getDeclaredWriteConcern(PersistentEntity entity) {
-        return getDeclaredWriteConcern(this.writeConcern, entity)
+        return getDeclaredWriteConcern(writeConcern, entity)
     }
 
     private WriteConcern getDeclaredWriteConcern(WriteConcern defaultConcern, PersistentEntity entity) {
@@ -233,7 +233,7 @@ abstract class AbstractMongoSession extends AbstractSession<MongoClient> {
      */
     @PackageScope
     void clearClientSession() {
-        this.clientSession = null
+        clientSession = null
     }
 
     /**
@@ -292,7 +292,7 @@ abstract class AbstractMongoSession extends AbstractSession<MongoClient> {
                 session.close()
                 throw e
             }
-            this.clientSession = session
+            clientSession = session
             return new MongoTransaction(this, session, readOnly)
         }
         if (readOnly && getDatastore().isTransactionsEnabled()) {
@@ -360,7 +360,7 @@ abstract class AbstractMongoSession extends AbstractSession<MongoClient> {
     abstract <T> T decode(Class<T> type, Object nativeObject)
 
     protected void addPostFlushOperations(List<PendingOperation> cascadeOperations) {
-        for (PendingOperation cascadeOperation : cascadeOperations) {
+        for (PendingOperation cascadeOperation in cascadeOperations) {
             addPostFlushOperation(cascadeOperation)
         }
     }
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoDatastore.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoDatastore.groovy
index 9f3b705d52..d2dd064ee5 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoDatastore.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoDatastore.groovy
@@ -301,13 +301,13 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
         DatastoreTransactionManager datastoreTransactionManager = new DatastoreTransactionManager()
         datastoreTransactionManager.setDatastore(this)
         transactionManager = datastoreTransactionManager
-        for (PersistentEntity entity : mappingContext.getPersistentEntities()) {
+        for (PersistentEntity entity in mappingContext.getPersistentEntities()) {
             registerEntity(entity)
         }
         if (!(connectionSources instanceof SingletonConnectionSources)) {
             final MongoDatastore parent = this
             Iterable<ConnectionSource<MongoClient, MongoConnectionSourceSettings>> allConnectionSources = connectionSources.getAllConnectionSources()
-            for (final ConnectionSource<MongoClient, MongoConnectionSourceSettings> connectionSource : allConnectionSources) {
+            for (final ConnectionSource<MongoClient, MongoConnectionSourceSettings> connectionSource in allConnectionSources) {
                 SingletonConnectionSources<MongoClient, MongoConnectionSourceSettings> singletonConnectionSources = new SingletonConnectionSources<MongoClient, MongoConnectionSourceSettings>(connectionSource, connectionSources.getBaseConfiguration())
                 MongoDatastore childDatastore
 
@@ -874,7 +874,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
      */
     private String buildIndexesSettingName() {
         String connection = connectionName()
-        if (ConnectionSource.DEFAULT.equals(connection)) {
+        if (ConnectionSource.DEFAULT == connection) {
             return MongoSettings.SETTING_BUILD_INDEXES
         }
         return MongoSettings.SETTING_CONNECTIONS + '.' + connection + '.buildIndexes (or ' +
@@ -1074,7 +1074,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
      * can name the same one.
      */
     private Map<MongoNamespace, CollectionDeclarations> declarationsByCollection() {
-        Map<MongoNamespace, CollectionDeclarations> collections = new LinkedHashMap<>()
+        Map<MongoNamespace, CollectionDeclarations> collections = [:]
         for (PersistentEntity entity in indexedEntities()) {
             com.mongodb.client.MongoCollection<Document> collection = getCollection(entity)
             CollectionDeclarations declarations = collections.get(collection.getNamespace())
@@ -1159,7 +1159,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
         for (Map.Entry<MongoNamespace, CollectionDeclarations> entry in declarationsByCollection().entrySet()) {
             MongoNamespace namespace = entry.getKey()
             for (Document index in entry.getValue().collection().listIndexes()) {
-                if (ID_INDEX_NAME.equals(index.getString('name'))) {
+                if (ID_INDEX_NAME == index.getString('name')) {
                     continue
                 }
                 Object key = index.get('key')
@@ -1203,7 +1203,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
         Map<MongoNamespace, CollectionDeclarations> mapped = declarationsByCollection()
         // Listed first, once per collection, rather than inferred from the drop: the driver answers a dropIndex on
         // a collection that no longer exists as a success, and a name can have been given to another index since.
-        Map<MongoNamespace, List<Document>> listed = new HashMap<>()
+        Map<MongoNamespace, List<Document>> listed = [:]
         for (UndeclaredIndex index in indexes) {
             MongoNamespace namespace = new MongoNamespace(index.database(), index.collection())
             CollectionDeclarations declarations = mapped.get(namespace)
@@ -1427,7 +1427,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
          * to its root's collection, and several classes can name the same one. Sharing it also keeps them
          * consistent, so a second class declaring keys the first has just created sees them as present.
          */
-        private final Map<MongoNamespace, ExistingIndexes> existingIndexes = new HashMap<>()
+        private final Map<MongoNamespace, ExistingIndexes> existingIndexes = [:]
 
         IndexBuildSummary(boolean classifying) {
             this.classifying = classifying
@@ -1738,7 +1738,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
     }
 
     protected void registerAllEntitiesWithEnhancer() {
-        for (PersistentEntity persistentEntity : getMappingContext().getPersistentEntities()) {
+        for (PersistentEntity persistentEntity in getMappingContext().getPersistentEntities()) {
             gormEnhancer.registerEntity(persistentEntity)
         }
     }
@@ -1886,7 +1886,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
             final MongoCollection mappedForm = classMapping.getMappedForm()
             if (mappedForm != null) {
                 List<MongoCollection.Index> indices = mappedForm.getIndices()
-                for (MongoCollection.Index index : indices) {
+                for (MongoCollection.Index index in indices) {
                     declarations.add(new IndexDeclaration(new Document(index.getDefinition()), index.getOptions(),
                             'with definition [' + index.getDefinition() + ']'))
                 }
@@ -1905,7 +1905,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
             }
         }
 
-        for (PersistentProperty<MongoAttribute> property : entity.getPersistentProperties()) {
+        for (PersistentProperty<MongoAttribute> property in entity.getPersistentProperties()) {
             final boolean indexed = isIndexed(property)
 
             if (indexed) {
@@ -1954,7 +1954,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
         Map<String, Object> options = rawOptions != null ? new HashMap<>(rawOptions) : new HashMap<>()
 
         // Control flag — not a Mongo index option.
-        boolean recreateOnConflict = Boolean.TRUE.equals(options.remove(INDEX_RECREATE_ON_CONFLICT))
+        boolean recreateOnConflict = Boolean.TRUE == options.remove(INDEX_RECREATE_ON_CONFLICT)
 
         Long expireAfterSeconds = null
         Object ttl = options.remove(INDEX_EXPIRE_AFTER_SECONDS)
@@ -2067,7 +2067,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
 
         // TTL change on an existing index — update in place, no rebuild, no gap. An index that merely holds the
         // name is a different index, so its expiry is not the declared one to update.
-        boolean ttlChange = !nameTaken && expireAfterSeconds != null && !expireAfterSeconds.equals(existingTtlSeconds)
+        boolean ttlChange = !nameTaken && expireAfterSeconds != null && expireAfterSeconds != existingTtlSeconds
         if (ttlChange) {
             try {
                 getMongoClient().getDatabase(getDatabaseName(entity))
@@ -2139,7 +2139,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
      */
     private static Document findIndexByName(Iterable<Document> indexes, String name) {
         for (Document index in indexes) {
-            if (name.equals(index.getString('name'))) {
+            if (name == index.getString('name')) {
                 return index
             }
         }
@@ -2227,9 +2227,9 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
     private static TextKeys declaredTextKeys(Document keys) {
         Document before = new Document()
         Document after = new Document()
-        Set<String> fields = new LinkedHashSet<>()
+        Set<String> fields = [] as Set
         for (Map.Entry<String, Object> entry in keys.entrySet()) {
-            if ('text'.equals(entry.getValue())) {
+            if ('text' == entry.getValue()) {
                 fields.add(entry.getKey())
             }
             else {
@@ -2248,7 +2248,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
         Document after = new Document()
         boolean pastText = false
         for (Map.Entry<String, Object> entry in key.entrySet()) {
-            if (TEXT_INDEX_KEY.equals(entry.getKey()) || TEXT_INDEX_TERM_KEY.equals(entry.getKey())) {
+            if (TEXT_INDEX_KEY == entry.getKey() || TEXT_INDEX_TERM_KEY == entry.getKey()) {
                 pastText = true
             }
             else {
@@ -2284,7 +2284,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
         if (key.containsKey(TEXT_INDEX_KEY)) {
             return true
         }
-        for (Object v : key.values()) {
+        for (Object v in key.values()) {
             if ('text' == v) {
                 return true
             }
@@ -2303,7 +2303,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
         Iterator<Map.Entry<String, Object>> existing = existingKey.entrySet().iterator()
         for (Map.Entry<String, Object> desired in desiredKey.entrySet()) {
             Map.Entry<String, Object> actual = existing.next()
-            if (!actual.getKey().equals(desired.getKey())) {
+            if (actual.getKey() != desired.getKey()) {
                 return false
             }
             Object a = actual.getValue()
@@ -2312,7 +2312,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
                 if (((Number) a).doubleValue() != ((Number) b).doubleValue()) {
                     return false
                 }
-            } else if (!Objects.equals(a, b)) {
+            } else if (a != b) {
                 return false
             }
         }
@@ -2894,7 +2894,7 @@ class MongoDatastore extends AbstractDatastore implements MappingContext.Listene
 
     class PersistentEntityCodeRegistry implements CodecProvider {
 
-        Map<String, PersistentEntityCodec> codecs = new HashMap<>()
+        Map<String, PersistentEntityCodec> codecs = [:]
 
         @Override
         def <T> Codec<T> get(Class<T> clazz, CodecRegistry registry) {
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoSession.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoSession.groovy
index 618f754230..27dc34bbc0 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoSession.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoSession.groovy
@@ -114,15 +114,15 @@ class MongoSession extends AbstractMongoSession {
                 return
             }
 
-            Map<String, Integer> numberOfOptimisticUpdates = new LinkedHashMap<>()
-            Map<String, Integer> numberOfPessimisticUpdates = new LinkedHashMap<>()
+            Map<String, Integer> numberOfOptimisticUpdates = [:]
+            Map<String, Integer> numberOfPessimisticUpdates = [:]
 
-            Map<PersistentEntity, List<WriteModel<Document>>> writeModels = new LinkedHashMap<>()
-            for (PersistentEntity persistentEntity : pendingInserts.keySet()) {
+            Map<PersistentEntity, List<WriteModel<Document>>> writeModels = [:]
+            for (PersistentEntity persistentEntity in pendingInserts.keySet()) {
                 final Collection<PendingInsert> inserts = pendingInserts.get(persistentEntity)
                 if (inserts != null && !inserts.isEmpty()) {
                     List<WriteModel<Document>> entityWrites = getWriteModelsForEntity(persistentEntity, writeModels)
-                    for (PendingInsert insert : inserts) {
+                    for (PendingInsert insert in inserts) {
                         insert.run()
 
                         if (insert.isVetoed()) {
@@ -137,7 +137,7 @@ class MongoSession extends AbstractMongoSession {
                 }
             }
 
-            for (PersistentEntity persistentEntity : pendingUpdates.keySet()) {
+            for (PersistentEntity persistentEntity in pendingUpdates.keySet()) {
                 final String name = persistentEntity.isRoot() ? persistentEntity.getName() : persistentEntity.getRootEntity().getName()
                 int numberOfOptimistic = numberOfOptimisticUpdates.containsKey(name) ? numberOfOptimisticUpdates.get(name) : 0
                 int numberOfPessimistic = numberOfPessimisticUpdates.containsKey(name) ? numberOfPessimisticUpdates.get(name) : 0
@@ -145,7 +145,7 @@ class MongoSession extends AbstractMongoSession {
                 final Collection<PendingUpdate> updates = pendingUpdates.get(persistentEntity)
                 if (updates != null && !updates.isEmpty()) {
                     List<WriteModel<Document>> entityWrites = getWriteModelsForEntity(persistentEntity, writeModels)
-                    for (PendingUpdate update : updates) {
+                    for (PendingUpdate update in updates) {
                         update.run()
 
                         if (update.isVetoed()) {
@@ -184,12 +184,12 @@ class MongoSession extends AbstractMongoSession {
                 numberOfPessimisticUpdates.put(name, numberOfPessimistic)
             }
 
-            for (PersistentEntity persistentEntity : pendingDeletes.keySet()) {
+            for (PersistentEntity persistentEntity in pendingDeletes.keySet()) {
                 final Collection<PendingDelete> deletes = pendingDeletes.get(persistentEntity)
                 if (deletes != null && !deletes.isEmpty()) {
                     List<WriteModel<Document>> entityWrites = getWriteModelsForEntity(persistentEntity, writeModels)
                     List<Object> nativeKeys = new ArrayList<>()
-                    for (PendingDelete delete : deletes) {
+                    for (PendingDelete delete in deletes) {
                         delete.run()
 
                         if (delete.isVetoed()) {
@@ -213,7 +213,7 @@ class MongoSession extends AbstractMongoSession {
                 }
             }
 
-            for (PersistentEntity persistentEntity : writeModels.keySet()) {
+            for (PersistentEntity persistentEntity in writeModels.keySet()) {
                 com.mongodb.client.MongoCollection<Document> collection = getCollection(persistentEntity)
                 final WriteConcern wc = getWriteConcern()
                 if (wc != null) {
@@ -240,7 +240,7 @@ class MongoSession extends AbstractMongoSession {
                 }
             }
 
-            for (Runnable postFlushOperation : postFlushOperations) {
+            for (Runnable postFlushOperation in postFlushOperations) {
                 postFlushOperation.run()
             }
         } finally {
@@ -255,13 +255,13 @@ class MongoSession extends AbstractMongoSession {
     protected Document createSetAndUnsetDoc(Document updateDoc) {
         final Set<String> keys = updateDoc.keySet()
         final Document unsets = new Document()
-        for (String key : keys) {
+        for (String key in keys) {
             final Object v = updateDoc.get(key)
             if (v == null) {
                 unsets.put(key, '')
             }
         }
-        for (String key : unsets.keySet()) {
+        for (String key in unsets.keySet()) {
             updateDoc.remove(key)
         }
         Document setAndUnsetDoc = new Document(MONGO_SET_OPERATOR, updateDoc)
@@ -296,14 +296,14 @@ class MongoSession extends AbstractMongoSession {
     void delete(Iterable objects) {
         final Map<PersistentEntity, List> toDelete = getDeleteMap(objects)
 
-        for (PersistentEntity persistentEntity : toDelete.keySet()) {
+        for (PersistentEntity persistentEntity in toDelete.keySet()) {
             final PersistentEntity entity = persistentEntity
             final List objectsToDelete = toDelete.get(entity)
             final MongoQuery query = new MongoQuery(this, entity)
             // Filters on the literal "_id" field, not the logical identity name, so the
             // criterion preprocessing in MongoQuery does not recognise it as an id.
             final List<Object> deleteKeys = new ArrayList<Object>()
-            for (Object k : objectsToDelete) {
+            for (Object k in objectsToDelete) {
                 deleteKeys.add(MongoIdCoercion.coerceIdToStoredType(k, entity))
             }
             query.in(MongoEntityPersister.MONGO_ID_FIELD, deleteKeys)
@@ -312,7 +312,7 @@ class MongoSession extends AbstractMongoSession {
             addPendingDelete(new PendingDeleteAdapter<Object, Object>(entity, mongoQuery, null) {
                 @Override
                 void run() {
-                    for (Object o : objectsToDelete) {
+                    for (Object o in objectsToDelete) {
                         if (!persister.cancelDelete(entity, createEntityAccess(entity, o))) {
                             clear(o)
                         }
@@ -324,8 +324,8 @@ class MongoSession extends AbstractMongoSession {
 
     protected Map<PersistentEntity, List> getDeleteMap(Iterable objects) {
         // sort the objects into sets by Persister, in case the objects are of different types.
-        Map<PersistentEntity, List> toDelete = new HashMap<>()
-        for (Object object : objects) {
+        Map<PersistentEntity, List> toDelete = [:]
+        for (Object object in objects) {
             if (object == null) {
                 continue
             }
@@ -335,7 +335,7 @@ class MongoSession extends AbstractMongoSession {
             }
             List listForPersister = toDelete.get(p)
             if (listForPersister == null) {
-                listForPersister = new ArrayList()
+                listForPersister = []
                 toDelete.put(p, listForPersister)
             }
             Serializable id = getObjectIdentifier(object)
@@ -513,7 +513,7 @@ class MongoSession extends AbstractMongoSession {
         MongoQuery mongoQuery = new MongoQuery(this, entity)
         List<Query.Criterion> criteriaList = criteria.getCriteria()
 
-        for (Query.Criterion c : criteriaList) {
+        for (Query.Criterion c in criteriaList) {
             mongoQuery.add(c)
         }
 
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoTransaction.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoTransaction.groovy
index bb7237fdd6..2b06b95ae6 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoTransaction.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/MongoTransaction.groovy
@@ -104,13 +104,13 @@ class MongoTransaction implements Transaction<ClientSession> {
                     try {
                         clientSession.abortTransaction()
                     } catch (RuntimeException e) {
-                        LOG.debug('Error aborting transaction after failed commit: {}', e.getMessage(), e)
+                        LOG.debug('Error aborting transaction after failed commit: {}', e.message, e)
                     }
                 }
                 try {
                     session.clear()
                 } catch (RuntimeException e) {
-                    LOG.debug('Error clearing session after failed transaction commit: {}', e.getMessage(), e)
+                    LOG.debug('Error clearing session after failed transaction commit: {}', e.message, e)
                 }
             }
             close()
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/config/MongoMappingContext.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/config/MongoMappingContext.groovy
index 81a14fa088..9f9b6b18d5 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/config/MongoMappingContext.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/config/MongoMappingContext.groovy
@@ -126,7 +126,7 @@ class MongoMappingContext extends DocumentMappingContext {
     ])
 
     @PackageScope CodecRegistry codecRegistry
-    @PackageScope Map<Class, Boolean> hasCodecCache = new HashMap<>()
+    @PackageScope Map<Class, Boolean> hasCodecCache = [:]
 
     /**
      * Storage type applied to {@code String id} domains that declare no explicit
@@ -268,7 +268,7 @@ class MongoMappingContext extends DocumentMappingContext {
         codecs.add(new PeriodCodec())
         codecs.add(new ZonedDateTimeCodec())
 
-        for (Codec codec : codecList) {
+        for (Codec codec in codecList) {
             codecs.add(codec)
         }
 
@@ -341,7 +341,7 @@ class MongoMappingContext extends DocumentMappingContext {
             }
         })
 
-        for (Converter converter : CodecExtensions.getBsonConverters()) {
+        for (Converter converter in CodecExtensions.getBsonConverters()) {
             converterRegistry.addConverter(converter)
         }
 
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/connections/RestartableMongoClient.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/connections/RestartableMongoClient.groovy
index eb2fe066fb..e606b8e379 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/connections/RestartableMongoClient.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/connections/RestartableMongoClient.groovy
@@ -207,7 +207,7 @@ final class RestartableMongoClient implements MongoClient {
 
     @Override
     ClusterDescription getClusterDescription() {
-        return driverClient().getClusterDescription()
+        return driverClient().clusterDescription
     }
 
     @Override
@@ -217,22 +217,22 @@ final class RestartableMongoClient implements MongoClient {
 
     @Override
     CodecRegistry getCodecRegistry() {
-        return driverClient().getCodecRegistry()
+        return driverClient().codecRegistry
     }
 
     @Override
     ReadPreference getReadPreference() {
-        return driverClient().getReadPreference()
+        return driverClient().readPreference
     }
 
     @Override
     WriteConcern getWriteConcern() {
-        return driverClient().getWriteConcern()
+        return driverClient().writeConcern
     }
 
     @Override
     ReadConcern getReadConcern() {
-        return driverClient().getReadConcern()
+        return driverClient().readConcern
     }
 
     @Override
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/AbstractMongoObectEntityPersister.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/AbstractMongoObectEntityPersister.groovy
index 8ce92e21fe..62316e2e90 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/AbstractMongoObectEntityPersister.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/AbstractMongoObectEntityPersister.groovy
@@ -125,7 +125,7 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
         T cached = (T) ((SessionImplementor<?>) getSession()).getCachedEntry(
                 entity, (Serializable) entityAccess.getIdentifier(), true)
 
-        return !dbo.equals(cached)
+        return dbo != cached
     }
 
     @Override
@@ -194,9 +194,9 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
 
     @Override
     protected void setEmbeddedCollectionKeys(Association association, EntityAccess embeddedEntityAccess, T embeddedEntry, List<Serializable> keys) {
-        List dbRefs = new ArrayList()
+        List dbRefs = []
         boolean reference = isReference(association)
-        for (Object foreignKey : keys) {
+        for (Object foreignKey in keys) {
             // Same as formulateDatabaseReference: the embedded collection's references must
             // carry the target's stored _id type.
             Object coerced = MongoIdCoercion.coerceIdToStoredType(foreignKey, association.getAssociatedEntity())
@@ -225,10 +225,10 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
 
         final ValueRetrievalStrategy<T> valueRetrievalStrategy = getValueRetrievalStrategy()
         Object entry = valueRetrievalStrategy.getValue(nativeEntry, getPropertyKey(association))
-        List keys = new ArrayList()
+        List keys = []
         if (entry instanceof List) {
             List entries = (List) entry
-            for (Object o : entries) {
+            for (Object o in entries) {
                 if (o instanceof DBRef) {
                     DBRef dbref = (DBRef) o
                     keys.add(dbref.getId())
@@ -249,7 +249,7 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
 
         PersistentProperty identity = persistentEntity.getIdentity()
         if (keys instanceof List) {
-            List actualKeys = new ArrayList()
+            List actualKeys = []
             Iterator iterator = keys.iterator()
             while (iterator.hasNext()) {
                 Object key = iterator.next()
@@ -259,7 +259,7 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
             query.in(identity.getName(), actualKeys)
         } else {
             List<Serializable> keyList = new ArrayList<>()
-            for (Serializable key : keys) {
+            for (Serializable key in keys) {
                 keyList.add(key)
             }
             query.in(identity.getName(), keyList)
@@ -267,8 +267,8 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
 
         List<Object> entityResults = new ArrayList<>()
         Iterator<Serializable> keyIterator = keys.iterator()
-        Map<Serializable, Object> resultMap = new HashMap<>()
-        for (Object o : query.list()) {
+        Map<Serializable, Object> resultMap = [:]
+        for (Object o in query.list()) {
             Object result = o
             if (isEmbeddedEntry(result)) {
                 final ValueRetrievalStrategy<T> valueRetrievalStrategy = getValueRetrievalStrategy()
@@ -379,9 +379,9 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
     protected void setManyToMany(PersistentEntity persistentEntity, Object obj,
                                  T nativeEntry, ManyToMany manyToMany, Collection associatedObjects,
                                  Map<Association, List<Serializable>> toManyKeys) {
-        List ids = new ArrayList()
+        List ids = []
         if (associatedObjects != null) {
-            for (Object o : associatedObjects) {
+            for (Object o in associatedObjects) {
                 if (o == null) {
                     ids.add(null)
                 } else {
@@ -442,8 +442,8 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
             // if the association is a unidirectional one-to-many we store the keys
             // embedded in the owning entity, otherwise we use a foreign key
             if (!association.isBidirectional()) {
-                List dbRefs = new ArrayList()
-                for (Object foreignKey : foreignKeys) {
+                List dbRefs = []
+                for (Object foreignKey in foreignKeys) {
                     // Same as formulateDatabaseReference: the stored reference must carry the
                     // target's _id type, or raw joins and DBRef consumers cannot match it.
                     Object coerced = MongoIdCoercion.coerceIdToStoredType(
@@ -502,8 +502,8 @@ abstract class AbstractMongoObectEntityPersister<T> extends NativeEntryEntityPer
         }
 
         private List extractIdsFromDbRefs(List indexedList) {
-            List resolvedDbRefs = new ArrayList()
-            for (Object indexedAssociation : indexedList) {
+            List resolvedDbRefs = []
+            for (Object indexedAssociation in indexedList) {
                 resolvedDbRefs.add(((DBRef) indexedAssociation).getId())
             }
             return resolvedDbRefs
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/MongoEntityPersister.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/MongoEntityPersister.groovy
index 870e75bf06..d0ad8a1211 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/MongoEntityPersister.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/engine/MongoEntityPersister.groovy
@@ -87,7 +87,7 @@ class MongoEntityPersister extends AbstractMongoObectEntityPersister<Document> {
             if (embeddedInstances instanceof Document) {
                 Map instances = new HashMap()
                 Document embedded = (Document) embeddedInstances
-                for (String key : embedded.keySet()) {
+                for (String key in embedded.keySet()) {
                     Object o = embedded.get(key)
                     if (o instanceof Document) {
                         Document nativeEntry = (Document) o
@@ -105,7 +105,7 @@ class MongoEntityPersister extends AbstractMongoObectEntityPersister<Document> {
 
             if (embeddedInstances instanceof Collection) {
                 Collection coll = (Collection) embeddedInstances
-                for (Object dbo : coll) {
+                for (Object dbo in coll) {
                     if (dbo instanceof Document) {
                         Document nativeEntry = (Document) dbo
                         Object instance =
@@ -240,21 +240,21 @@ class MongoEntityPersister extends AbstractMongoObectEntityPersister<Document> {
         } else if (value.getClass().isArray()) {
             Object[] array = (Object[]) value
             List<Object> nativeColl = new ArrayList<Object>(array.length)
-            for (Object item : array) {
+            for (Object item in array) {
                 nativeColl.add(getSimpleNativePropertyValue(item, mappingContext))
             }
             nativeValue = nativeColl
         } else if (value instanceof Collection) {
             Collection existingColl = (Collection) value
             List<Object> nativeColl = new ArrayList<Object>(existingColl.size())
-            for (Object item : existingColl) {
+            for (Object item in existingColl) {
                 nativeColl.add(getSimpleNativePropertyValue(item, mappingContext))
             }
             nativeValue = nativeColl
         } else if (value instanceof Map) {
             Map<String, Object> existingMap = (Map) value
-            Map<String, Object> newMap = new LinkedHashMap<>()
-            for (Map.Entry<String, Object> entry : existingMap.entrySet()) {
+            Map<String, Object> newMap = [:]
+            for (Map.Entry<String, Object> entry in existingMap.entrySet()) {
                 newMap.put(entry.getKey(), getSimpleNativePropertyValue(entry.getValue(), mappingContext))
             }
             nativeValue = newMap
@@ -301,18 +301,18 @@ class MongoEntityPersister extends AbstractMongoObectEntityPersister<Document> {
     }
 
     private Document removeNullEntries(Document nativeEntry) {
-        for (String key : new HashSet<String>(nativeEntry.keySet())) {
+        for (String key in new HashSet<String>(nativeEntry.keySet())) {
             Object o = nativeEntry.get(key)
             if (o == null) {
                 nativeEntry.remove(key)
             } else if (o instanceof Object[]) {
-                for (Object o2 : (Object[]) o) {
+                for (Object o2 in (Object[]) o) {
                     if (o2 instanceof Document) {
                         removeNullEntries((Document) o2)
                     }
                 }
             } else if (o instanceof List) {
-                for (Object o2 : (List) o) {
+                for (Object o2 in (List) o) {
                     if (o2 instanceof Document) {
                         removeNullEntries((Document) o2)
                     }
diff --git a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/query/MongoQuery.groovy b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/query/MongoQuery.groovy
index 7cb8782721..df51843b9c 100644
--- a/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/query/MongoQuery.groovy
+++ b/grails-data-mongodb/core/src/main/groovy/org/grails/datastore/mapping/mongo/query/MongoQuery.groovy
@@ -191,7 +191,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
                 PersistentEntity idTarget = resolveIdCriterionTarget(entity, inCriterion.getProperty())
                 if (idTarget != null && MongoIdCoercion.resolveStoredAs(idTarget) != null) {
                     List<Object> coerced = new ArrayList<Object>(values.size())
-                    for (Object v : values) {
+                    for (Object v in values) {
                         coerced.add(MongoIdCoercion.coerceIdToStoredType(v, idTarget))
                     }
                     values = coerced
@@ -552,7 +552,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
         List<Document> aggregationPipeline = aggregatePipeline.getAggregationPipeline()
         boolean singleResult = aggregatePipeline.isSingleResult()
         List<ProjectedProperty> projectedKeys = aggregatePipeline.getProjectedKeys()
-        List projectedResults = new ArrayList()
+        List projectedResults = []
 
         AggregateIterable<Document> aggregatedResults = mongoSession.aggregate(collection, aggregationPipeline)
         aggregatedResults = (AggregateIterable<Document>) setHint(aggregatedResults)
@@ -560,7 +560,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
 
         if (singleResult && aggregateCursor.hasNext()) {
             Document dbo = aggregateCursor.next()
-            for (ProjectedProperty projectedProperty : projectedKeys) {
+            for (ProjectedProperty projectedProperty in projectedKeys) {
                 Object value = dbo.get(projectedProperty.projectionKey)
                 PersistentProperty property = projectedProperty.property
                 if (value != null) {
@@ -650,7 +650,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
 
         if (!orderBy.isEmpty()) {
             Document orderObject = new Document()
-            for (Order order : orderBy) {
+            for (Order order in orderBy) {
                 String property = order.getProperty()
                 property = getPropertyName(entity, property)
                 orderObject.put(property, order.getDirection() == Order.Direction.DESC ? -1 : 1)
@@ -686,9 +686,9 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
         Collection<PersistentEntity> childEntities = entity.getMappingContext().getChildEntities(entity)
         if (childEntities.size() > 0) {
             HashMap classValue = new HashMap()
-            ArrayList classes = new ArrayList()
+            ArrayList classes = []
             classes.add(entity.getDiscriminator())
-            for (PersistentEntity childEntity : childEntities) {
+            for (PersistentEntity childEntity in childEntities) {
                 classes.add(childEntity.getDiscriminator())
             }
             classValue.put(MONGO_IN_OPERATOR, classes)
@@ -737,14 +737,14 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
         // so that property names can't clash (e.g. for an $and containing two $ors)
         if (criteria.getCriteria().size() > 1) {
             if (criteria instanceof Disjunction) {
-                subList = new ArrayList()
+                subList = []
                 query.put(OR_OPERATOR, subList)
             } else if (criteria instanceof Conjunction) {
-                subList = new ArrayList()
+                subList = []
                 query.put(AND_OPERATOR, subList)
             }
         }
-        for (Criterion criterion : criteria.getCriteria()) {
+        for (Criterion criterion in criteria.getCriteria()) {
             final QueryHandler queryHandler = queryHandlers.get(criterion.getClass())
             if (queryHandler != null) {
                 Document dbo = query
@@ -821,9 +821,9 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
     private static PersistentEntity resolveIdCriterionTarget(PersistentEntity entity, String propertyName) {
         PersistentProperty property = entity.getPropertyByName(propertyName)
         if (property instanceof ToOne) {
-            return ((ToOne) property).getAssociatedEntity()
+            return property.getAssociatedEntity()
         }
-        if (entity.getIdentity() != null && entity.getIdentity().getName().equals(propertyName)) {
+        if (entity.getIdentity() != null && entity.getIdentity().getName() == propertyName) {
             return entity
         }
         return null
@@ -837,7 +837,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
      */
     @PackageScope
     static void prefixEmbeddedQuery(String prefix, Document source, Document target) {
-        for (String key : source.keySet()) {
+        for (String key in source.keySet()) {
             Object value = source.get(key)
             if (key.charAt(0) == ('$' as char)) {
                 if (!(value instanceof List)) {
@@ -848,7 +848,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
                             '] is not supported inside an embedded association query')
                 }
                 List<Object> rewritten = new ArrayList<>()
-                for (Object element : (List) value) {
+                for (Object element in (List) value) {
                     if (element instanceof Document) {
                         Document rewrittenElement = new Document()
                         prefixEmbeddedQuery(prefix, (Document) element, rewrittenElement)
@@ -879,7 +879,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
     }
 
     private List wrapObjectResultInList(Object object) {
-        List result = new ArrayList()
+        List result = []
         result.add(object)
         return result
     }
@@ -1122,10 +1122,6 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
             this.maxDistance = Distance.valueOf(maxDistance.doubleValue())
         }
 
-        void setMaxDistance(Distance maxDistance) {
-            this.maxDistance = maxDistance
-        }
-
     }
 
     /**
@@ -1250,7 +1246,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
 
         @PackageScope MongoCursor cursor
         private List<ProjectedProperty> projectedProperties
-        private List initializedObjects = new ArrayList()
+        private List initializedObjects = []
         private int internalIndex = 0
         @PackageScope boolean initialized = false
         private boolean containsAssociations = false
@@ -1260,7 +1256,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
             this.cursor = cursor
             this.projectedProperties = projectedProperties
             this.session = session
-            for (ProjectedProperty projectedProperty : projectedProperties) {
+            for (ProjectedProperty projectedProperty in projectedProperties) {
                 if (projectedProperty.property instanceof Association) {
                     this.containsAssociations = true
                     break
@@ -1335,11 +1331,11 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
                         handleNoResults()
                     } else if (property instanceof Embedded) {
                         Embedded embedded = (Embedded) property
-                        List embeddedList = new ArrayList()
+                        List embeddedList = []
                         CodecRegistry codecRegistry = session.getDatastore().getCodecRegistry()
                         PersistentEntityCodec codec = new PersistentEntityCodec(codecRegistry, embedded.getAssociatedEntity())
 
-                        for (Serializable embeddedDoc : identifiers) {
+                        for (Serializable embeddedDoc in identifiers) {
                             if (embeddedDoc instanceof Document) {
                                 Document documentObject = (Document) embeddedDoc
 
@@ -1363,7 +1359,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
                         Document dbo = (Document) cursor.next()
                         List<Object> projectedResult = new ArrayList<>()
                         int index = 0
-                        for (ProjectedProperty projectedProperty : projectedProperties) {
+                        for (ProjectedProperty projectedProperty in projectedProperties) {
                             PersistentProperty property = projectedProperty.property
                             Object value = getProjectedValue(dbo, projectedProperty.projectionKey)
                             if (property instanceof Association) {
@@ -1385,18 +1381,18 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
                         return
                     }
 
-                    Map<Integer, List> finalResults = new HashMap<>()
-                    for (Integer index : associationMap.keySet()) {
+                    Map<Integer, List> finalResults = [:]
+                    for (Integer index in associationMap.keySet()) {
                         Map<Class, List<Serializable>> associatedEntityIdentifiers = associationMap.get(index)
-                        for (Class associationClass : associatedEntityIdentifiers.keySet()) {
+                        for (Class associationClass in associatedEntityIdentifiers.keySet()) {
                             List<Serializable> identifiers = associatedEntityIdentifiers.get(associationClass)
                             finalResults.put(index, session.retrieveAll(associationClass, identifiers))
                         }
                     }
 
-                    for (Object initializedObject : initializedObjects) {
+                    for (Object initializedObject in initializedObjects) {
                         List projected = (List) initializedObject
-                        for (Integer index : finalResults.keySet()) {
+                        for (Integer index in finalResults.keySet()) {
                             List resultsByIndex = finalResults.get(index)
                             if (index < resultsByIndex.size()) {
                                 projected.set(index, resultsByIndex.get(index))
@@ -1428,9 +1424,9 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
         }
 
         private Map<Integer, Map<Class, List<Serializable>>> createAssociationMap() {
-            Map<Integer, Map<Class, List<Serializable>>> associationMap = new HashMap<>()
+            Map<Integer, Map<Class, List<Serializable>>> associationMap = [:]
             associationMap = associationMap.withDefault { Object o ->
-                Map<Class, List<Serializable>> subMap = new HashMap<>()
+                Map<Class, List<Serializable>> subMap = [:]
                 subMap = subMap.withDefault { Object k ->
                     return new ArrayList<Serializable>()
                 }
@@ -1478,7 +1474,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
         Object addInitializedObject(Document dbo) {
             if (projectedProperties.size() > 1) {
                 List<Object> projected = new ArrayList<>()
-                for (ProjectedProperty projectedProperty : projectedProperties) {
+                for (ProjectedProperty projectedProperty in projectedProperties) {
                     Object value
                     value = getProjectedValue(dbo, projectedProperty.projectionKey)
                     projected.add(value)
@@ -1661,7 +1657,7 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
             groupByObject.put(MongoEntityPersister.MONGO_ID_FIELD, 0)
             Document additionalGroupBy = null
 
-            for (Projection projection : projectionList) {
+            for (Projection projection in projectionList) {
                 ProjectionHandler projectionHandler = resolveProjectProjectionHandlers().get(projection.getClass())
                 ProjectedProperty projectedProperty = new ProjectedProperty()
                 projectedProperty.projection = projection
@@ -1711,10 +1707,10 @@ class MongoQuery extends BsonQuery implements QueryArgumentsAware {
             List<Order> orderBy = mongoQuery.getOrderBy()
             if (!orderBy.isEmpty()) {
                 Document sortBy = new Document()
-                for (Order order : orderBy) {
+                for (Order order in orderBy) {
                     String prop = order.getProperty()
                     String sortKey = prop
-                    for (ProjectedProperty pp : projectedKeys) {
+                    for (ProjectedProperty pp in projectedKeys) {
                         if (pp.property != null && pp.property.getName() == prop) {
                             sortKey = pp.projectionKey
                             if (sortKey.startsWith('id.')) {
diff --git a/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/EmbeddedMongoInitializer.groovy b/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/EmbeddedMongoInitializer.groovy
index 99ac8e4b69..f829f9385f 100644
--- a/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/EmbeddedMongoInitializer.groovy
+++ b/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/EmbeddedMongoInitializer.groovy
@@ -190,7 +190,7 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
      */
     @PackageScope
     static List<EmbeddedMongoBackend> defaultBackends(ClassLoader classLoader) {
-        List<EmbeddedMongoBackend> backends = new ArrayList<>()
+        List<EmbeddedMongoBackend> backends = []
         if (ClassUtils.isPresent(FLAPDOODLE_MONGOD_CLASS, classLoader)) {
             backends.add(new FlapdoodleMongoBackend())
         }
@@ -266,8 +266,8 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
             url = start(backend, settings, database)
         }
 
-        Map<String, Object> published = new HashMap<>()
-        for (String propertyName : propertyNames) {
+        Map<String, Object> published = [:]
+        for (String propertyName in propertyNames) {
             published.put(propertyName, url)
         }
         environment.getPropertySources().addFirst(new MapPropertySource(PROPERTY_SOURCE_NAME, published))
@@ -381,7 +381,7 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
     private EmbeddedMongoBackend selectBackend(ConfigurableEnvironment environment) {
         String requested = environment.getProperty(BACKEND)
         if (requested != null && !requested.isEmpty()) {
-            for (EmbeddedMongoBackend backend : this.backends) {
+            for (EmbeddedMongoBackend backend in this.backends) {
                 if (backend.getName() == requested) {
                     if (!backend.isAvailable()) {
                         throw new IllegalStateException(BACKEND + '=' + requested +
@@ -401,7 +401,7 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
                     '.')
         }
 
-        for (EmbeddedMongoBackend backend : this.backends) {
+        for (EmbeddedMongoBackend backend in this.backends) {
             if (backend.isAvailable()) {
                 return backend
             }
@@ -413,8 +413,8 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
     }
 
     private List<String> availableNames() {
-        List<String> names = new ArrayList<>()
-        for (EmbeddedMongoBackend backend : this.backends) {
+        List<String> names = []
+        for (EmbeddedMongoBackend backend in this.backends) {
             if (backend.isAvailable()) {
                 names.add(backend.getName())
             }
@@ -423,8 +423,8 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
     }
 
     private Set<String> propertyNames(ConfigurableEnvironment environment) {
-        Set<String> propertyNames = new LinkedHashSet<>()
-        for (String propertyName : environment.getProperty(PROPERTY_NAMES, DEFAULT_PROPERTY_NAME).split(',')) {
+        Set<String> propertyNames = [] as Set
+        for (String propertyName in environment.getProperty(PROPERTY_NAMES, DEFAULT_PROPERTY_NAME).split(',')) {
             String trimmed = propertyName.trim()
             if (!trimmed.isEmpty()) {
                 propertyNames.add(trimmed)
@@ -444,7 +444,7 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
      * them rather than by which happened to be looked at first.</p>
      */
     private Matcher firstAskingForEmbedded(ConfigurableEnvironment environment, Set<String> propertyNames) {
-        for (String propertyName : propertyNames) {
+        for (String propertyName in propertyNames) {
             String url = environment.getProperty(propertyName)
             if (url != null) {
                 Matcher matcher = EMBEDDED_URL.matcher(url.trim())
@@ -486,7 +486,7 @@ class EmbeddedMongoInitializer implements ApplicationContextInitializer<Configur
     private static void stopEverythingAtExit() {
         if (SHUTDOWN_HOOK_ADDED.compareAndSet(false, true)) {
             Runtime.getRuntime().addShutdownHook(new Thread({ ->
-                for (StartedServer started : STARTED.values()) {
+                for (StartedServer started in STARTED.values()) {
                     started.running().stop()
                 }
             } as Runnable))
diff --git a/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/ReplicaSetInitiator.groovy b/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/ReplicaSetInitiator.groovy
index 2ed50aefc0..930cf9249a 100644
--- a/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/ReplicaSetInitiator.groovy
+++ b/grails-data-mongodb/embedded/src/main/groovy/org/grails/datastore/gorm/mongodb/embedded/ReplicaSetInitiator.groovy
@@ -75,7 +75,7 @@ final class ReplicaSetInitiator {
         try {
             client.getDatabase('admin').runCommand(new Document('replSetInitiate', configuration))
         } catch (MongoCommandException ex) {
-            if (ex.getErrorCode() != ALREADY_INITIALIZED) {
+            if (ex.errorCode != ALREADY_INITIALIZED) {
                 throw new IllegalStateException('Could not initiate the replica set ' + replicaSet +
                         ' on the embedded MongoDB at ' + address, ex)
             }
@@ -108,7 +108,7 @@ final class ReplicaSetInitiator {
     private static boolean isPrimary(MongoClient client) {
         try {
             Document hello = client.getDatabase('admin').runCommand(new Document('hello', 1))
-            return Boolean.TRUE.equals(hello.getBoolean('isWritablePrimary'))
+            return Boolean.TRUE == hello.getBoolean('isWritablePrimary')
         } catch (RuntimeException ex) {
             // The server closes connections as it transitions, so a failure here means "not yet".
             return false
diff --git a/grails-data-mongodb/spring-data/src/main/groovy/org/springframework/data/mongodb/GormSpringDataSessionSupport.groovy b/grails-data-mongodb/spring-data/src/main/groovy/org/springframework/data/mongodb/GormSpringDataSessionSupport.groovy
index e459f1d65a..655ad28713 100644
--- a/grails-data-mongodb/spring-data/src/main/groovy/org/springframework/data/mongodb/GormSpringDataSessionSupport.groovy
+++ b/grails-data-mongodb/spring-data/src/main/groovy/org/springframework/data/mongodb/GormSpringDataSessionSupport.groovy
@@ -58,7 +58,7 @@ final class GormSpringDataSessionSupport {
     static void bindClientSession(MongoDatabaseFactory databaseFactory, ClientSession clientSession) {
         if (!TransactionSynchronizationManager.hasResource(databaseFactory)) {
             MongoResourceHolder holder = new MongoResourceHolder(clientSession, databaseFactory)
-            holder.setSynchronizedWithTransaction(true)
+            holder.synchronizedWithTransaction = true
             TransactionSynchronizationManager.bindResource(databaseFactory, holder)
         }
     }