You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2024/10/27 05:25:19 UTC

(groovy) branch master updated: Flip operands of `equals` to avoid potential NPE

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

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 1ad5b8f160 Flip operands of `equals` to avoid potential NPE
1ad5b8f160 is described below

commit 1ad5b8f1606db5f9814f490881c166c8ff0857e2
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Oct 27 13:24:15 2024 +0800

    Flip operands of `equals` to avoid potential NPE
---
 .../groovy/beans/BindableASTTransformation.java    |  6 ++---
 .../groovy/beans/VetoableASTTransformation.java    |  6 ++---
 .../groovy/grape/GrabAnnotationTransformation.java |  2 +-
 src/main/java/groovy/lang/GroovyClassLoader.java   |  2 +-
 .../java/groovy/lang/GroovyRuntimeException.java   |  2 +-
 src/main/java/groovy/lang/GroovyShell.java         |  2 +-
 src/main/java/groovy/lang/MetaClassImpl.java       |  4 +--
 src/main/java/groovy/namespace/QName.java          | 10 +++----
 .../groovy/transform/builder/ExternalStrategy.java |  6 ++---
 src/main/java/groovy/util/GroovyScriptEngine.java  |  2 +-
 .../apache/groovy/ast/tools/ClassNodeUtils.java    |  4 +--
 .../groovy/ast/tools/ImmutablePropertyUtils.java   |  2 +-
 .../apache/groovy/ast/tools/VisibilityUtils.java   |  2 +-
 .../java/org/codehaus/groovy/ast/ClassNode.java    |  2 +-
 .../java/org/codehaus/groovy/ast/FieldNode.java    |  2 +-
 .../groovy/ast/MixinASTTransformation.java         |  2 +-
 .../java/org/codehaus/groovy/ast/ModuleNode.java   |  8 +++---
 .../groovy/ast/decompiled/DecompiledClassNode.java |  2 +-
 .../org/codehaus/groovy/ast/tools/BeanUtils.java   |  2 +-
 .../codehaus/groovy/ast/tools/ClosureUtils.java    |  4 +--
 .../codehaus/groovy/ast/tools/GeneralUtils.java    |  2 +-
 .../org/codehaus/groovy/classgen/EnumVisitor.java  | 31 +++++++++++++++++++---
 .../codehaus/groovy/classgen/ExtendedVerifier.java |  8 +++---
 .../codehaus/groovy/classgen/GeneratorContext.java |  2 +-
 .../groovy/classgen/InnerClassVisitor.java         |  2 +-
 .../groovy/classgen/VariableScopeVisitor.java      |  4 +--
 .../org/codehaus/groovy/classgen/Verifier.java     |  2 +-
 .../codehaus/groovy/classgen/asm/CompileStack.java |  4 +--
 .../codehaus/groovy/control/ClassNodeResolver.java |  2 +-
 .../groovy/control/CompilerConfiguration.java      | 14 +++++-----
 .../groovy/control/PlaceholderVisitor.java         |  8 +++---
 .../codehaus/groovy/control/ResolveVisitor.java    | 10 +++----
 .../groovy/control/StaticImportVisitor.java        |  2 +-
 .../groovy/reflection/MixinInMetaClass.java        |  2 +-
 .../groovy/runtime/DefaultGroovyMethods.java       |  2 +-
 .../codehaus/groovy/runtime/MetaClassHelper.java   |  4 +--
 .../runtime/metaclass/ClosureMetaMethod.java       |  2 +-
 .../typehandling/DefaultTypeTransformation.java    |  4 +--
 .../org/codehaus/groovy/tools/DgmConverter.java    |  4 +--
 .../groovy/tools/javac/JavaStubGenerator.java      | 13 +++++----
 .../groovy/tools/javac/JavacJavaCompiler.java      |  2 +-
 .../transform/AutoCloneASTTransformation.java      |  2 +-
 .../transform/BaseScriptASTTransformation.java     |  2 +-
 .../EqualsAndHashCodeASTTransformation.java        |  2 +-
 .../ExternalizeMethodsASTTransformation.java       | 16 +++++------
 .../groovy/transform/NewifyASTTransformation.java  |  2 +-
 .../transform/PackageScopeASTTransformation.java   |  2 +-
 .../transform/RecordTypeASTTransformation.java     |  2 +-
 .../groovy/transform/SealedASTTransformation.java  |  2 +-
 .../transform/SynchronizedASTTransformation.java   |  2 +-
 .../transform/ToStringASTTransformation.java       |  2 +-
 .../TupleConstructorASTTransformation.java         |  2 +-
 .../transform/stc/StaticTypeCheckingVisitor.java   | 22 +++++++--------
 .../org/codehaus/groovy/vmplugin/v8/Java8.java     |  4 +--
 .../vmplugin/v8/PluginDefaultGroovyMethods.java    |  4 +--
 .../org/codehaus/groovy/vmplugin/v8/Selector.java  |  8 +++---
 .../org/codehaus/groovy/vmplugin/v9/Java9.java     |  2 +-
 57 files changed, 148 insertions(+), 124 deletions(-)

diff --git a/src/main/java/groovy/beans/BindableASTTransformation.java b/src/main/java/groovy/beans/BindableASTTransformation.java
index 4e13e5eec8..d362e37c71 100644
--- a/src/main/java/groovy/beans/BindableASTTransformation.java
+++ b/src/main/java/groovy/beans/BindableASTTransformation.java
@@ -263,9 +263,9 @@ public class BindableASTTransformation implements ASTTransformation, Opcodes {
         while (consideredClass!= null) {
             for (MethodNode method : consideredClass.getMethods()) {
                 // just check length, MOP will match it up
-                foundAdd = foundAdd || method.getName().equals("addPropertyChangeListener") && method.getParameters().length == 1;
-                foundRemove = foundRemove || method.getName().equals("removePropertyChangeListener") && method.getParameters().length == 1;
-                foundFire = foundFire || method.getName().equals("firePropertyChange") && method.getParameters().length == 3;
+                foundAdd = foundAdd || "addPropertyChangeListener".equals(method.getName()) && method.getParameters().length == 1;
+                foundRemove = foundRemove || "removePropertyChangeListener".equals(method.getName()) && method.getParameters().length == 1;
+                foundFire = foundFire || "firePropertyChange".equals(method.getName()) && method.getParameters().length == 3;
                 if (foundAdd && foundRemove && foundFire) {
                     return false;
                 }
diff --git a/src/main/java/groovy/beans/VetoableASTTransformation.java b/src/main/java/groovy/beans/VetoableASTTransformation.java
index ea37877758..24774f283a 100644
--- a/src/main/java/groovy/beans/VetoableASTTransformation.java
+++ b/src/main/java/groovy/beans/VetoableASTTransformation.java
@@ -257,9 +257,9 @@ public class VetoableASTTransformation extends BindableASTTransformation {
         while (consideredClass!= null) {
             for (MethodNode method : consideredClass.getMethods()) {
                 // just check length, MOP will match it up
-                foundAdd = foundAdd || method.getName().equals("addVetoableChangeListener") && method.getParameters().length == 1;
-                foundRemove = foundRemove || method.getName().equals("removeVetoableChangeListener") && method.getParameters().length == 1;
-                foundFire = foundFire || method.getName().equals("fireVetoableChange") && method.getParameters().length == 3;
+                foundAdd = foundAdd || "addVetoableChangeListener".equals(method.getName()) && method.getParameters().length == 1;
+                foundRemove = foundRemove || "removeVetoableChangeListener".equals(method.getName()) && method.getParameters().length == 1;
+                foundFire = foundFire || "fireVetoableChange".equals(method.getName()) && method.getParameters().length == 3;
                 if (foundAdd && foundRemove && foundFire) {
                     return false;
                 }
diff --git a/src/main/java/groovy/grape/GrabAnnotationTransformation.java b/src/main/java/groovy/grape/GrabAnnotationTransformation.java
index fb318126e2..1190c95b8b 100644
--- a/src/main/java/groovy/grape/GrabAnnotationTransformation.java
+++ b/src/main/java/groovy/grape/GrabAnnotationTransformation.java
@@ -566,7 +566,7 @@ public class GrabAnnotationTransformation extends ClassCodeVisitorSupport implem
             for (Map.Entry<String, Object> entry : parts.entrySet()) {
                 String key = entry.getKey();
                 String value = entry.getValue().toString();
-                if (!key.equals("version") || !value.equals("*") || !exclude) {
+                if (!"version".equals(key) || !"*".equals(value) || !exclude) {
                     node.addMember(key, constX(value));
                 }
             }
diff --git a/src/main/java/groovy/lang/GroovyClassLoader.java b/src/main/java/groovy/lang/GroovyClassLoader.java
index 3b734ced40..afaa29bb01 100644
--- a/src/main/java/groovy/lang/GroovyClassLoader.java
+++ b/src/main/java/groovy/lang/GroovyClassLoader.java
@@ -774,7 +774,7 @@ public class GroovyClassLoader extends URLClassLoader {
     }
 
     private static boolean isFile(final URL ret) {
-        return ret != null && ret.getProtocol().equals("file");
+        return ret != null && "file".equals(ret.getProtocol());
     }
 
     private static File getFileForUrl(final URL ret, final String filename) {
diff --git a/src/main/java/groovy/lang/GroovyRuntimeException.java b/src/main/java/groovy/lang/GroovyRuntimeException.java
index 1cac6fc506..421efef6d6 100644
--- a/src/main/java/groovy/lang/GroovyRuntimeException.java
+++ b/src/main/java/groovy/lang/GroovyRuntimeException.java
@@ -85,7 +85,7 @@ public class GroovyRuntimeException extends RuntimeException {
         if (module != null) {
             answer += module.getDescription();
         }
-        if (answer.equals(". ")) {
+        if (". ".equals(answer)) {
             return "";
         }
         return answer;
diff --git a/src/main/java/groovy/lang/GroovyShell.java b/src/main/java/groovy/lang/GroovyShell.java
index c6bd035ffe..97922fb828 100644
--- a/src/main/java/groovy/lang/GroovyShell.java
+++ b/src/main/java/groovy/lang/GroovyShell.java
@@ -211,7 +211,7 @@ public class GroovyShell extends GroovyObjectSupport {
         String scriptName = scriptFile.getName();
         int p = scriptName.lastIndexOf('.');
         if (p++ >= 0) {
-            if (scriptName.substring(p).equals("java")) {
+            if ("java".equals(scriptName.substring(p))) {
                 throw new CompilationFailedException(0, null);
             }
         }
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index d483e3a9d3..427d4b4e60 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -1220,7 +1220,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
         }
 
         if (method != null) {
-            if (arguments.length == 0 && methodName.equals("clone") && method.getDeclaringClass() == ReflectionCache.OBJECT_CLASS) {
+            if (arguments.length == 0 && "clone".equals(methodName) && method.getDeclaringClass() == ReflectionCache.OBJECT_CLASS) {
                 throw method.processDoMethodInvokeException(new CloneNotSupportedException(), object, arguments);
             }
             MetaMethod transformedMetaMethod = VM_PLUGIN.transformMetaMethod(this, method);
@@ -3331,7 +3331,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
     }
 
     private static boolean isGenericGetMethod(MetaMethod method) {
-        if (method.getName().equals("get")) {
+        if ("get".equals(method.getName())) {
             CachedClass[] parameterTypes = method.getParameterTypes();
             return parameterTypes.length == 1 && parameterTypes[0].getTheClass() == String.class;
         }
diff --git a/src/main/java/groovy/namespace/QName.java b/src/main/java/groovy/namespace/QName.java
index 28181afb54..4ba0fb0b3d 100644
--- a/src/main/java/groovy/namespace/QName.java
+++ b/src/main/java/groovy/namespace/QName.java
@@ -215,8 +215,8 @@ public class QName implements Serializable {
         if (o == null) return false;
         if (o instanceof QName) {
             final QName qName = (QName) o;
-            if (!namespaceURI.equals(qName.namespaceURI) && !namespaceURI.equals("*") && !qName.namespaceURI.equals("*")) return false;
-            return localPart.equals(qName.localPart) || localPart.equals("*") || qName.localPart.equals("*");
+            if (!namespaceURI.equals(qName.namespaceURI) && !"*".equals(namespaceURI) && !"*".equals(qName.namespaceURI)) return false;
+            return localPart.equals(qName.localPart) || "*".equals(localPart) || "*".equals(qName.localPart);
         } else if (o instanceof String) {
             final String string = (String)o;
             if (string.length() == 0) return false;
@@ -226,8 +226,8 @@ public class QName implements Serializable {
             if (lastColonIndex < 0 || lastColonIndex == string.length() - 1) return false;
             final String stringPrefix = string.substring(0,lastColonIndex);
             final String stringLocalPart = string.substring(lastColonIndex + 1);
-            if (stringPrefix.equals(prefix) || stringPrefix.equals(namespaceURI) || stringPrefix.equals("*")) {
-                return localPart.equals(stringLocalPart) || stringLocalPart.equals("*");
+            if (stringPrefix.equals(prefix) || stringPrefix.equals(namespaceURI) || "*".equals(stringPrefix)) {
+                return localPart.equals(stringLocalPart) || "*".equals(stringLocalPart);
             }
         }
         return false;
@@ -287,4 +287,4 @@ public class QName implements Serializable {
         result = 29 * result + localPart.hashCode();
         return result;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/groovy/transform/builder/ExternalStrategy.java b/src/main/java/groovy/transform/builder/ExternalStrategy.java
index 8be1dfb29c..f5076e93f9 100644
--- a/src/main/java/groovy/transform/builder/ExternalStrategy.java
+++ b/src/main/java/groovy/transform/builder/ExternalStrategy.java
@@ -137,7 +137,7 @@ public class ExternalStrategy extends BuilderASTTransformation.AbstractBuilderSt
     }
 
     private MethodNode createBuilderMethodForField(ClassNode builderClass, PropertyInfo prop, String prefix) {
-        String propName = prop.getName().equals("class") ? "clazz" : prop.getName();
+        String propName = "class".equals(prop.getName()) ? "clazz" : prop.getName();
         String setterName = getSetterName(prefix, prop.getName());
         return new MethodNode(setterName, ACC_PUBLIC, newClass(builderClass), params(param(newClass(prop.getType()), propName)), NO_EXCEPTIONS, block(
                 stmt(assignX(propX(varX("this"), constX(propName)), varX(propName))),
@@ -147,14 +147,14 @@ public class ExternalStrategy extends BuilderASTTransformation.AbstractBuilderSt
 
     private static FieldNode createFieldCopy(ClassNode builderClass, PropertyInfo prop) {
         String propName = prop.getName();
-        return new FieldNode(propName.equals("class") ? "clazz" : propName, ACC_PRIVATE, newClass(prop.getType()), builderClass, DEFAULT_INITIAL_VALUE);
+        return new FieldNode("class".equals(propName) ? "clazz" : propName, ACC_PRIVATE, newClass(prop.getType()), builderClass, DEFAULT_INITIAL_VALUE);
     }
 
     private static Expression initializeInstance(ClassNode sourceClass, List<PropertyInfo> props, BlockStatement body) {
         Expression instance = localVarX("_the" + sourceClass.getNameWithoutPackage(), sourceClass);
         body.addStatement(declS(instance, ctorX(sourceClass)));
         for (PropertyInfo prop : props) {
-            body.addStatement(stmt(assignX(propX(instance, prop.getName()), varX(prop.getName().equals("class") ? "clazz" : prop.getName(), newClass(prop.getType())))));
+            body.addStatement(stmt(assignX(propX(instance, prop.getName()), varX("class".equals(prop.getName()) ? "clazz" : prop.getName(), newClass(prop.getType())))));
         }
         return instance;
     }
diff --git a/src/main/java/groovy/util/GroovyScriptEngine.java b/src/main/java/groovy/util/GroovyScriptEngine.java
index c0f37ff348..15775d8752 100644
--- a/src/main/java/groovy/util/GroovyScriptEngine.java
+++ b/src/main/java/groovy/util/GroovyScriptEngine.java
@@ -319,7 +319,7 @@ public class GroovyScriptEngine implements ResourceConnector {
         String line;
         while (true) {
             System.out.print("groovy> ");
-            if ((line = br.readLine()) == null || line.equals("quit")) {
+            if ((line = br.readLine()) == null || "quit".equals(line)) {
                 break;
             }
             try {
diff --git a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
index 03e0e9ffcb..2ad8badba1 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
@@ -596,8 +596,8 @@ public class ClassNodeUtils {
     //--------------------------------------------------------------------------
 
     private static boolean isPackagePrivate(final AnnotatedNode aNode) {
-        return aNode.getAnnotations().stream().anyMatch(anno -> anno.getClassNode().getName().equals("groovy.transform.PackageScope"))
-            || aNode.getDeclaringClass().getAnnotations().stream().anyMatch(anno -> anno.getClassNode().getName().equals("groovy.transform.PackageScope")
+        return aNode.getAnnotations().stream().anyMatch(anno -> "groovy.transform.PackageScope".equals(anno.getClassNode().getName()))
+            || aNode.getDeclaringClass().getAnnotations().stream().anyMatch(anno -> "groovy.transform.PackageScope".equals(anno.getClassNode().getName())
                                                                             && Optional.ofNullable(anno.getMember("value")).filter(expr -> expr.getText().contains("FIELDS")).isPresent());
     }
 
diff --git a/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java b/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java
index 711fcf7e2e..a79d845545 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java
@@ -204,7 +204,7 @@ public class ImmutablePropertyUtils {
     }
 
     private static String prettyTypeName(final String name) {
-        return name.equals("java.lang.Object") ? name + " or def" : name;
+        return "java.lang.Object".equals(name) ? name + " or def" : name;
     }
 
     public static boolean isKnownImmutableType(final ClassNode fieldType, final List<String> knownImmutableClasses) {
diff --git a/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java b/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java
index b750b01c16..24006689ae 100644
--- a/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java
@@ -96,7 +96,7 @@ public class VisibilityUtils {
     private static Visibility getVisibility(final Expression e) {
         if (e instanceof PropertyExpression) {
             PropertyExpression pe = (PropertyExpression) e;
-            if (pe.getObjectExpression() instanceof ClassExpression && pe.getObjectExpression().getText().equals("groovy.transform.options.Visibility")) {
+            if (pe.getObjectExpression() instanceof ClassExpression && "groovy.transform.options.Visibility".equals(pe.getObjectExpression().getText())) {
                 return Visibility.valueOf(pe.getPropertyAsString());
             }
         }
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassNode.java b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
index af6c5709a3..a5a789d4d4 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
@@ -714,7 +714,7 @@ public class ClassNode extends AnnotatedNode {
                     BinaryExpression bExp = (BinaryExpression) ((ExpressionStatement) stmt).getExpression();
                     if (bExp.getLeftExpression() instanceof FieldExpression) {
                         FieldExpression fExp = (FieldExpression) bExp.getLeftExpression();
-                        if (fExp.getFieldName().equals("$VALUES")) {
+                        if ("$VALUES".equals(fExp.getFieldName())) {
                             for (Statement initStmt : staticFieldInitializerStatements) {
                                 it.add(initStmt);
                             }
diff --git a/src/main/java/org/codehaus/groovy/ast/FieldNode.java b/src/main/java/org/codehaus/groovy/ast/FieldNode.java
index b8d1e12a5c..4f33f65d3c 100644
--- a/src/main/java/org/codehaus/groovy/ast/FieldNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/FieldNode.java
@@ -137,7 +137,7 @@ public class FieldNode extends AnnotatedNode implements Variable {
 
     @Override
     public boolean equals(Object obj) {
-        if (obj != null && obj.getClass().getName().equals("org.codehaus.groovy.ast.decompiled.LazyFieldNode")) {
+        if (obj != null && "org.codehaus.groovy.ast.decompiled.LazyFieldNode".equals(obj.getClass().getName())) {
             return obj.equals(this);
         }
         return super.equals(obj);
diff --git a/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java b/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
index db86fe1809..a98e53ba45 100644
--- a/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
@@ -43,7 +43,7 @@ public class MixinASTTransformation extends AbstractASTTransformation {
         init(nodes, source);
         AnnotationNode node = (AnnotationNode) nodes[0];
         AnnotatedNode target = (AnnotatedNode) nodes[1];
-        if (!node.getClassNode().getName().equals("groovy.lang.Mixin"))
+        if (!"groovy.lang.Mixin".equals(node.getClassNode().getName()))
             return;
 
         Expression value = node.getMember("value");
diff --git a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
index 3a923cb853..8c7edf3bf2 100644
--- a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
@@ -488,7 +488,7 @@ public class ModuleNode extends ASTNode {
 
     private MethodNode findRun() {
         for (MethodNode node : methods) {
-            if (node.getName().equals("run") && node.getParameters().length == 0) {
+            if ("run".equals(node.getName()) && node.getParameters().length == 0) {
                 return node;
             }
         }
@@ -505,14 +505,14 @@ public class ModuleNode extends ASTNode {
         boolean foundStatic = false;
         MethodNode result = null;
         for (MethodNode node : methods) {
-            if (node.getName().equals("main") && !node.isPrivate()) {
+            if ("main".equals(node.getName()) && !node.isPrivate()) {
                 int numParams = node.getParameters().length;
                 if (numParams < 2) {
                     ClassNode argType = numParams > 0 ? node.getParameters()[0].getType() : null;
                     ClassNode retType = node.getReturnType();
 
-                    boolean argTypeMatches = argType == null || argType.getNameWithoutPackage().equals("Object") || (argType.isArray() && argType.getComponentType().getNameWithoutPackage().equals("String"));
-                    boolean retTypeMatches = ClassHelper.isPrimitiveVoid(retType) || retType.getNameWithoutPackage().equals("Object");
+                    boolean argTypeMatches = argType == null || "Object".equals(argType.getNameWithoutPackage()) || (argType.isArray() && "String".equals(argType.getComponentType().getNameWithoutPackage()));
+                    boolean retTypeMatches = ClassHelper.isPrimitiveVoid(retType) || "Object".equals(retType.getNameWithoutPackage());
                     if (retTypeMatches && argTypeMatches) {
                         if (node.isStatic() ? foundStatic : foundInstance) {
                             throw new RuntimeException("Repetitive main method found.");
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java b/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java
index e919d090db..1957cd46bb 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java
@@ -96,7 +96,7 @@ public class DecompiledClassNode extends ClassNode {
         List<AnnotationStub> annotations = classData.annotations;
         if (annotations != null) {
             for (AnnotationStub stub : annotations) {
-                if (stub.className.equals("groovy.transform.Sealed")) {
+                if ("groovy.transform.Sealed".equals(stub.className)) {
                     return true;
                 }
             }
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
index 9ddf976a51..0e68469484 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
@@ -111,7 +111,7 @@ public class BeanUtils {
             if (!includeStatic && mNode.isStatic()) continue;
             if (hasAnnotation(mNode, INTERNAL_TYPE)) continue;
             String name = mNode.getName();
-            if ((name.length() <= 3 && !name.startsWith(IS_PREFIX)) || name.equals("getClass") || name.equals("getMetaClass") || name.equals("getDeclaringClass")) {
+            if ((name.length() <= 3 && !name.startsWith(IS_PREFIX)) || "getClass".equals(name) || "getMetaClass".equals(name) || "getDeclaringClass".equals(name)) {
                 // Optimization: skip invalid propertyNames
                 continue;
             }
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java
index f9e59d54c5..d0788f6fa4 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java
@@ -53,7 +53,7 @@ public class ClosureUtils {
     public static boolean hasSingleCharacterArg(final Closure c) {
         if (c.getMaximumNumberOfParameters() != 1) return false;
         String typeName = c.getParameterTypes()[0].getName();
-        return typeName.equals("char") || typeName.equals("java.lang.Character");
+        return "char".equals(typeName) || "java.lang.Character".equals(typeName);
     }
 
     /**
@@ -64,7 +64,7 @@ public class ClosureUtils {
     public static boolean hasSingleStringArg(final Closure c) {
         if (c.getMaximumNumberOfParameters() != 1) return false;
         String typeName = c.getParameterTypes()[0].getName();
-        return typeName.equals("java.lang.String");
+        return "java.lang.String".equals(typeName);
     }
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
index f94be91dc7..fb56bded7a 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -960,7 +960,7 @@ public class GeneralUtils {
                 continue;
             }
 
-            if (!includeGenerated && annotation.getClassNode().getName().equals("groovy.transform.Generated")) {
+            if (!includeGenerated && "groovy.transform.Generated".equals(annotation.getClassNode().getName())) {
                 continue;
             }
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java b/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java
index 6ac3c48b7e..a29076de97 100644
--- a/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java
@@ -47,7 +47,32 @@ import java.util.List;
 
 import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
 import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.*;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.args;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.arrayX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.block;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.callThisX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorThisX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.fieldX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.geX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.ifS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.indexX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.ltX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.mapX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.minusX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.plusX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.spreadX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
 import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
 import static org.objectweb.asm.Opcodes.ACC_FINAL;
 import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
@@ -116,8 +141,8 @@ public class EnumVisitor extends ClassCodeVisitorSupport {
         boolean hasNext = false;
         boolean hasPrevious = false;
         for (MethodNode m : enumClass.getMethods()) {
-            if (m.getName().equals("next") && m.getParameters().length == 0) hasNext = true;
-            if (m.getName().equals("previous") && m.getParameters().length == 0) hasPrevious = true;
+            if ("next".equals(m.getName()) && m.getParameters().length == 0) hasNext = true;
+            if ("previous".equals(m.getName()) && m.getParameters().length == 0) hasPrevious = true;
             if (hasNext && hasPrevious) break;
         }
         boolean empty = true;
diff --git a/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java b/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java
index a153b64233..5e761c0240 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java
@@ -312,7 +312,7 @@ public class ExtendedVerifier extends ClassCodeVisitorSupport {
 
             // Check if the annotation target is correct, unless it's the target annotating an annotation definition
             // defining on which target elements the annotation applies
-            boolean isTargetAnnotation = name.equals("java.lang.annotation.Target");
+            boolean isTargetAnnotation = "java.lang.annotation.Target".equals(name);
             if (!isTargetAnnotation && !visited.isTargetAllowed(target) && !isTypeUseScenario(visited, target)) {
                 addError("Annotation @" + name + " is not allowed on element " + AnnotationNode.targetToName(target), visited);
             }
@@ -337,7 +337,7 @@ public class ExtendedVerifier extends ClassCodeVisitorSupport {
         if (!repeatableCache.containsKey(name)) {
             boolean result = false;
             for (AnnotationNode anno : annoClassNode.getAnnotations()) {
-                if (anno.getClassNode().getName().equals("java.lang.annotation.Repeatable")) {
+                if ("java.lang.annotation.Repeatable".equals(anno.getClassNode().getName())) {
                     result = true;
                     break;
                 }
@@ -358,7 +358,7 @@ public class ExtendedVerifier extends ClassCodeVisitorSupport {
                 ClassNode repeatable = null;
                 AnnotationNode repeatee = entry.getValue().get(0);
                 for (AnnotationNode anno : repeatee.getClassNode().getAnnotations()) {
-                    if (anno.getClassNode().getName().equals("java.lang.annotation.Repeatable")) {
+                    if ("java.lang.annotation.Repeatable".equals(anno.getClassNode().getName())) {
                         Expression value = anno.getMember("value");
                         if (value instanceof ClassExpression && value.getType().isAnnotationDefinition()) {
                             repeatable = value.getType();
@@ -418,7 +418,7 @@ public class ExtendedVerifier extends ClassCodeVisitorSupport {
     // TODO GROOVY-5011 handle case of @Override on a property
     private void visitOverride(final AnnotatedNode node, final AnnotationNode visited) {
         ClassNode annotationType = visited.getClassNode();
-        if (annotationType.isResolved() && annotationType.getName().equals("java.lang.Override")) {
+        if (annotationType.isResolved() && "java.lang.Override".equals(annotationType.getName())) {
             if (node instanceof MethodNode && !Boolean.TRUE.equals(node.getNodeMetaData(Verifier.DEFAULT_PARAMETER_GENERATED))) {
                 boolean override = false;
                 MethodNode origMethod = (MethodNode) node;
diff --git a/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java b/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java
index 0a0b78b270..ab21252094 100644
--- a/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java
+++ b/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java
@@ -95,7 +95,7 @@ public class GeneratorContext {
     }
 
     public static String encodeAsValidClassName(final String name) {
-        if (name.equals("module-info") || name.equals("package-info")) return name;
+        if ("module-info".equals(name) || "package-info".equals(name)) return name;
 
         int lastEscape = -1;
         StringBuilder b = null;
diff --git a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
index 4134db9039..0281bfc0a9 100644
--- a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
@@ -259,7 +259,7 @@ public class InnerClassVisitor extends InnerClassVisitorHelper {
         }
         // GROOVY-8433: Category transform implies static method
         isStatic = isStatic || innerClass.getOuterClass().getAnnotations().stream()
-            .anyMatch(a -> a.getClassNode().getName().equals("groovy.lang.Category"));
+            .anyMatch(a -> "groovy.lang.Category".equals(a.getClassNode().getName()));
         return isStatic;
     }
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
index 51d26ada89..34105073e8 100644
--- a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
@@ -362,9 +362,9 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
         Expression object = expression.getObjectExpression();
         if (!(object instanceof VariableExpression)) return;
         VariableExpression ve = (VariableExpression) object;
-        if (!ve.getName().equals("this")) return;
+        if (!"this".equals(ve.getName())) return;
         String name = expression.getPropertyAsString();
-        if (name == null || name.equals("class")) return;
+        if (name == null || "class".equals(name)) return;
         Variable member = findClassMember(currentClass, name);
         if (member == null) return;
         checkVariableContextAccess(member, expression);
diff --git a/src/main/java/org/codehaus/groovy/classgen/Verifier.java b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
index 1f7c001abe..1368603938 100644
--- a/src/main/java/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
@@ -734,7 +734,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
     }
 
     private static void adjustTypesIfMainMethod(final MethodNode node) {
-        if (node.isPublic() && node.isStatic() && node.getName().equals("main")) {
+        if (node.isPublic() && node.isStatic() && "main".equals(node.getName())) {
             Parameter[] params = node.getParameters();
             if (params.length == 1) {
                 Parameter param = params[0];
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
index e302b48cad..edfc98f603 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
@@ -297,8 +297,8 @@ public class CompileStack {
      * @return the normal variable or null if not found (and <code>mustExist</code> not true)
      */
     public BytecodeVariable getVariable(final String variableName, final boolean mustExist) {
-        if (variableName.equals("this")) return BytecodeVariable.THIS_VARIABLE;
-        if (variableName.equals("super")) return BytecodeVariable.SUPER_VARIABLE;
+        if ("this".equals(variableName)) return BytecodeVariable.THIS_VARIABLE;
+        if ("super".equals(variableName)) return BytecodeVariable.SUPER_VARIABLE;
         BytecodeVariable v = stackVariables.get(variableName);
         if (v == null && mustExist)
             throw new GroovyBugError("tried to get a variable with the name " + variableName + " as stack variable, but a variable with this name was not created");
diff --git a/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java b/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java
index 94e8317853..7a9c037d07 100644
--- a/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java
+++ b/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java
@@ -337,7 +337,7 @@ public class ClassNodeResolver {
             long lastMod;
             // Special handling for file:// protocol, as getLastModified() often reports
             // incorrect results (-1)
-            if (source.getProtocol().equals("file")) {
+            if ("file".equals(source.getProtocol())) {
                 // Coerce the file URL to a File
                 String path = source.getPath().replace('/', File.separatorChar).replace('|', ':');
                 File file = new File(path);
diff --git a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
index f2036dca89..ee54727ab0 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
@@ -738,7 +738,7 @@ public class CompilerConfiguration {
             numeric = Integer.parseInt(text);
         } catch (NumberFormatException e) {
             text = text.toLowerCase();
-            if (text.equals("none")) {
+            if ("none".equals(text)) {
                 numeric = WarningMessage.NONE;
             } else if (text.startsWith("likely")) {
                 numeric = WarningMessage.LIKELY_ERRORS;
@@ -765,13 +765,13 @@ public class CompilerConfiguration {
         if (text != null) setTargetBytecode(text);
 
         text = configuration.getProperty("groovy.parameters");
-        if (text != null) setParameters(text.equalsIgnoreCase("true"));
+        if (text != null) setParameters("true".equalsIgnoreCase(text));
 
         text = configuration.getProperty("groovy.preview.features");
-        if (text != null) setPreviewFeatures(text.equalsIgnoreCase("true"));
+        if (text != null) setPreviewFeatures("true".equalsIgnoreCase(text));
 
         text = configuration.getProperty("groovy.log.classgen");
-        if (text != null) setLogClassgen(text.equalsIgnoreCase("true"));
+        if (text != null) setLogClassgen("true".equalsIgnoreCase(text));
 
         text = configuration.getProperty("groovy.log.classgen.stacktrace.max.depth");
         if (text != null) {
@@ -787,10 +787,10 @@ public class CompilerConfiguration {
         if (text != null) setClasspath(text);
 
         text = configuration.getProperty("groovy.output.verbose");
-        if (text != null) setVerbose(text.equalsIgnoreCase("true"));
+        if (text != null) setVerbose("true".equalsIgnoreCase(text));
 
         text = configuration.getProperty("groovy.output.debug");
-        if (text != null) setDebug(text.equalsIgnoreCase("true"));
+        if (text != null) setDebug("true".equalsIgnoreCase(text));
 
         numeric = 10;
         text = configuration.getProperty("groovy.errors.tolerance", "10");
@@ -808,7 +808,7 @@ public class CompilerConfiguration {
         if (text != null) setScriptBaseClass(text);
 
         text = configuration.getProperty("groovy.recompile");
-        if (text != null) setRecompileGroovySource(text.equalsIgnoreCase("true"));
+        if (text != null) setRecompileGroovySource("true".equalsIgnoreCase(text));
 
         numeric = 100;
         text = configuration.getProperty("groovy.recompile.minimumIntervall"); // legacy misspelling
diff --git a/src/main/java/org/codehaus/groovy/control/PlaceholderVisitor.java b/src/main/java/org/codehaus/groovy/control/PlaceholderVisitor.java
index 7beea392ec..d0e5a44c7a 100644
--- a/src/main/java/org/codehaus/groovy/control/PlaceholderVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/PlaceholderVisitor.java
@@ -51,11 +51,11 @@ public class PlaceholderVisitor extends ClassCodeVisitorSupport {
         if (expression.isMultipleAssignmentDeclaration() && expression.getTupleExpression().getExpressions().size() > 1) {
             long underscoreCount = StreamSupport.stream(expression.getTupleExpression().spliterator(), false)
                 .map(e -> ((VariableExpression) e).getName())
-                .filter(s -> s.equals("_"))
+                .filter(s -> "_".equals(s))
                 .count();
             if (underscoreCount > 1) {
                 expression.getTupleExpression().getExpressions().forEach(e -> {
-                    if (((VariableExpression) e).getName().equals("_")) {
+                    if ("_".equals(((VariableExpression) e).getName())) {
                         markAsPlaceholder(e);
                     }
                 });
@@ -74,11 +74,11 @@ public class PlaceholderVisitor extends ClassCodeVisitorSupport {
         if (expression.getParameters() != null) {
             long underscoreCount = Arrays.stream(expression.getParameters())
                 .map(Parameter::getName)
-                .filter(s -> s.equals("_"))
+                .filter(s -> "_".equals(s))
                 .count();
             if (underscoreCount > 1) {
                 for (Parameter param : expression.getParameters()) {
-                    if (param.getName().equals("_")) {
+                    if ("_".equals(param.getName())) {
                         markAsPlaceholder(param);
                     }
                 }
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index b638af3f3f..9921c0b40c 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -848,7 +848,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
 
             String property = ((PropertyExpression) expr).getPropertyAsString();
             // the class property stops resolving, dynamic property names too
-            if (property == null || property.equals("class")) {
+            if (property == null || "class".equals(property)) {
                 return null;
             }
             Tuple2<StringBuilder, Boolean> classNameInfo = makeClassName(doInitialClassTest, name, property);
@@ -898,7 +898,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         String propertyName = classProperty.getPropertyAsString();
 
         // if it's "Type.foo.bar" or something else return PropertyExpression
-        if (propertyName == null || !propertyName.equals("class")) return pe;
+        if (propertyName == null || !"class".equals(propertyName)) return pe;
         // if it's "Type.class" or "pack.Type.class" return ClassExpression
         ce.setSourcePosition(classProperty);
         if (stack.isEmpty()) return ce;
@@ -973,7 +973,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         if (expression.isImplicitThis()) return;
         String prop = expression.getPropertyAsString();
         if (prop == null) return;
-        if (!prop.equals("this") && !prop.equals("super")) return;
+        if (!"this".equals(prop) && !"super".equals(prop)) return;
 
         ClassNode type = expression.getObjectExpression().getType();
         if (expression.getObjectExpression() instanceof ClassExpression && !isSuperCallToDefaultMethod(expression) && !isThisCallToPrivateInterfaceMethod(expression)) {
@@ -1003,13 +1003,13 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
     private boolean isSuperCallToDefaultMethod(PropertyExpression expression) {
         // a more sophisticated check might be required in the future
         ClassExpression clazzExpression = (ClassExpression) expression.getObjectExpression();
-        return clazzExpression.getType().isInterface() && expression.getPropertyAsString().equals("super");
+        return clazzExpression.getType().isInterface() && "super".equals(expression.getPropertyAsString());
     }
 
     private boolean isThisCallToPrivateInterfaceMethod(PropertyExpression expression) {
         // a more sophisticated check might be required in the future
         ClassExpression clazzExpression = (ClassExpression) expression.getObjectExpression();
-        return clazzExpression.getType().isInterface() && expression.getPropertyAsString().equals("this");
+        return clazzExpression.getType().isInterface() && "this".equals(expression.getPropertyAsString());
     }
 
     protected Expression transformVariableExpression(final VariableExpression ve) {
diff --git a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
index 999f945231..dc4dd8e96f 100644
--- a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
@@ -300,7 +300,7 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
                         return result;
                     }
                 }
-            } else if (inSpecialConstructorCall || (!inClosure && !foundInstanceMethod && !name.equals("call"))) {
+            } else if (inSpecialConstructorCall || (!inClosure && !foundInstanceMethod && !"call".equals(name))) {
                 // check for reference to static method in this(...) or super(...) or when call not resolved
                 if (hasPossibleStaticMember.test(currentClass)) {
                     Expression result = new StaticMethodCallExpression(currentClass, name, args);
diff --git a/src/main/java/org/codehaus/groovy/reflection/MixinInMetaClass.java b/src/main/java/org/codehaus/groovy/reflection/MixinInMetaClass.java
index 13e7d22c10..90fc73d1d2 100644
--- a/src/main/java/org/codehaus/groovy/reflection/MixinInMetaClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/MixinInMetaClass.java
@@ -140,7 +140,7 @@ public class MixinInMetaClass {
                 if (method.isStatic()) {
                     if (method instanceof CachedMethod)
                         staticMethod(self, arr, (CachedMethod) method);
-                } else if (method.getDeclaringClass().getTheClass() != Object.class || method.getName().equals("toString")) {
+                } else if (method.getDeclaringClass().getTheClass() != Object.class || "toString".equals(method.getName())) {
                   //if (self.pickMethod(method.getName(), method.getNativeParameterTypes()) == null) {
                         arr.add(new MixinInstanceMetaMethod(method, mixin));
                   //}
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 88c984c388..f7ed8afc61 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -4014,7 +4014,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
         boolean groovyObject = self instanceof GroovyObject;
         while (klass != null) {
             for (Field field : klass.getDeclaredFields()) {
-                if (Modifier.isStatic(field.getModifiers()) || (groovyObject && field.getName().equals("metaClass"))) {
+                if (Modifier.isStatic(field.getModifiers()) || (groovyObject && "metaClass".equals(field.getName()))) {
                     continue;
                 }
                 buffer.append(" ");
diff --git a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
index 735aa0c569..d74e032a93 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
@@ -297,7 +297,7 @@ public class MetaClassHelper {
         if (GeneratedClosure.class.isAssignableFrom(closureOrLambdaClass)) {
             // determine parameter count from generated "doCall" method(s)
             for (Method m : closureOrLambdaClass.getDeclaredMethods()) {
-                if (m.getName().equals("doCall")) {
+                if ("doCall".equals(m.getName())) {
                     if (parameterCount != -2) {
                         parameterCount = -1; // 0 or 1
                     } else {
@@ -808,7 +808,7 @@ public class MetaClassHelper {
     }
 
     public static boolean isGenericSetMethod(MetaMethod method) {
-        return (method.getName().equals("set"))
+        return ("set".equals(method.getName()))
                 && method.getParameterTypes().length == 2;
     }
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaMethod.java
index 037080aabb..3af6d3242d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaMethod.java
@@ -111,7 +111,7 @@ public class ClosureMetaMethod extends MetaMethod implements ClosureInvokingMeth
             }
         } else if (closure instanceof GeneratedClosure) {
             for (CachedMethod method : ReflectionCache.getCachedClass(closure.getClass()).getMethods()) {
-                if (method.getName().equals("doCall")) {
+                if ("doCall".equals(method.getName())) {
                     MetaMethod metaMethod = new ClosureMetaMethod(name, declaringClass, closure, method);
                     mms.add(adjustParamTypesForStdMethods(metaMethod, name));
                 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
index dc7674daaa..74ec06c908 100644
--- a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
+++ b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
@@ -539,7 +539,7 @@ public class DefaultTypeTransformation {
         if (value instanceof Class) {
             Class superclass = ((Class) value).getSuperclass();
             while (superclass != null) {
-                if (superclass.getName().equals("java.lang.Enum")) {
+                if ("java.lang.Enum".equals(superclass.getName())) {
                     return true;
                 }
                 superclass = superclass.getSuperclass();
@@ -899,7 +899,7 @@ public class DefaultTypeTransformation {
         int[] ans = null;
 
         // conservative coding
-        if (a.getClass().getName().equals("[I")) {
+        if ("[I".equals(a.getClass().getName())) {
             ans = (int[]) a;
         } else {
             Object[] ia = (Object[]) a;
diff --git a/src/main/java/org/codehaus/groovy/tools/DgmConverter.java b/src/main/java/org/codehaus/groovy/tools/DgmConverter.java
index 32d2b9b1d6..c9cc4b5b01 100644
--- a/src/main/java/org/codehaus/groovy/tools/DgmConverter.java
+++ b/src/main/java/org/codehaus/groovy/tools/DgmConverter.java
@@ -58,8 +58,8 @@ public class DgmConverter {
 
     public static void main(String[] args) throws IOException {
         String targetDirectory = "build/classes/";
-        boolean info = (args.length == 1 && args[0].equals("--info"))
-                || (args.length==2 && args[0].equals("--info"));
+        boolean info = (args.length == 1 && "--info".equals(args[0]))
+                || (args.length==2 && "--info".equals(args[0]));
         if (info && args.length==2) {
             targetDirectory = args[1];
             if (!targetDirectory.endsWith("/")) targetDirectory += "/";
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index ea24247a83..c0a1cdd0bc 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -61,7 +61,6 @@ import org.objectweb.asm.Opcodes;
 
 import javax.tools.FileObject;
 import javax.tools.JavaFileObject;
-
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
@@ -509,9 +508,9 @@ public class JavaStubGenerator {
                 // skip values() method and valueOf(String)
                 String name = method.getName();
                 Parameter[] params = method.getParameters();
-                if (params.length == 0 && name.equals("values")) continue;
+                if (params.length == 0 && "values".equals(name)) continue;
                 if (params.length == 1
-                        && name.equals("valueOf")
+                        && "valueOf".equals(name)
                         && isStringType(params[0].getType())) {
                     continue;
                 }
@@ -720,7 +719,7 @@ public class JavaStubGenerator {
     private void printMethod(final PrintWriter out, final ClassNode classNode, final MethodNode methodNode) {
         if (methodNode.isStaticConstructor()) return;
         if (methodNode.isPrivate() || !Utilities.isJavaIdentifier(methodNode.getName())) return;
-        if (methodNode.isSynthetic() && (methodNode.getName().equals("$getStaticMetaClass"))) return;
+        if (methodNode.isSynthetic() && ("$getStaticMetaClass".equals(methodNode.getName()))) return;
 
         printAnnotations(out, methodNode);
         if (!isInterfaceOrTrait(classNode)) {
@@ -768,7 +767,7 @@ public class JavaStubGenerator {
                     ClassNode rt = methodNode.getReturnType();
                     Consumer<Expression> valuePrinter = (value) -> {
                         if (isClassType(rt) || (rt.isArray() && isClassType(rt.getComponentType()))) {
-                            if (value.getType().getName().equals("groovy.lang.Closure")) {
+                            if ("groovy.lang.Closure".equals(value.getType().getName())) {
                                 out.print("groovy.lang.Closure.class");
                                 return;
                             }
@@ -1115,7 +1114,7 @@ public class JavaStubGenerator {
                 expr.visit(new CodeVisitorSupport() {
                     @Override
                     public void visitPropertyExpression(final PropertyExpression property) {
-                        if (property.getObjectExpression().getText().equals("groovy.transform.PackageScopeTarget")
+                        if ("groovy.transform.PackageScopeTarget".equals(property.getObjectExpression().getText())
                                 && property.getPropertyAsString().equals(type.name())) {
                             val[0] = true;
                         }
@@ -1124,7 +1123,7 @@ public class JavaStubGenerator {
                     public void visitVariableExpression(final VariableExpression variable) {
                         if (variable.getName().equals(type.name())) {
                             ImportNode imp = currentModule.getStaticImports().get(type.name());
-                            if (imp != null && imp.getType().getName().equals("groovy.transform.PackageScopeTarget")) {
+                            if (imp != null && "groovy.transform.PackageScopeTarget".equals(imp.getType().getName())) {
                                 val[0] = true;
                             } else if (imp == null && currentModule.getStaticStarImports().get("groovy.transform.PackageScopeTarget") != null) {
                                 val[0] = true;
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java b/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
index c49dc2bc5e..ef7835e820 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
@@ -164,7 +164,7 @@ public class JavacJavaCompiler implements JavaCompiler {
         if (namedValues != null) {
             for (int i = 0, n = namedValues.length; i < n; i += 2) {
                 String name = namedValues[i];
-                if (name.equals("classpath")) hadClasspath = true;
+                if ("classpath".equals(name)) hadClasspath = true;
                 params.add("-" + name);
                 params.add(namedValues[i + 1]);
             }
diff --git a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
index 0916d79dcc..7f631f56a2 100644
--- a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
@@ -318,7 +318,7 @@ public class AutoCloneASTTransformation extends AbstractASTTransformation {
             Expression oe = prop.getObjectExpression();
             if (oe instanceof ClassExpression) {
                 ClassExpression ce = (ClassExpression) oe;
-                if (ce.getType().getName().equals("groovy.transform.AutoCloneStyle")) {
+                if ("groovy.transform.AutoCloneStyle".equals(ce.getType().getName())) {
                     return AutoCloneStyle.valueOf(prop.getPropertyAsString());
                 }
             }
diff --git a/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java
index 55a193821a..ed89ebd301 100644
--- a/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/BaseScriptASTTransformation.java
@@ -159,7 +159,7 @@ public class BaseScriptASTTransformation extends AbstractASTTransformation {
     }
 
     private static boolean isCustomScriptBodyMethod(final MethodNode mn) {
-        return mn != null && !(mn.getName().equals("run")
+        return mn != null && !("run".equals(mn.getName())
                             && mn.getParameters().length == 0
                             && mn.getDeclaringClass().equals(ClassHelper.SCRIPT_TYPE));
     }
diff --git a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
index 0d5bd80d67..cf724f8356 100644
--- a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
@@ -131,7 +131,7 @@ public class EqualsAndHashCodeASTTransformation extends AbstractASTTransformatio
                 pojo = (boolean) pojoMember;
             }
             boolean useCanEqual = !memberHasValue(anno, "useCanEqual", false);
-            if (callSuper && cNode.getSuperClass().getName().equals("java.lang.Object")) {
+            if (callSuper && "java.lang.Object".equals(cNode.getSuperClass().getName())) {
                 addError("Error during " + MY_TYPE_NAME + " processing: callSuper=true but '" + cNode.getName() + "' has no super class.", anno);
             }
             boolean includeFields = memberHasValue(anno, "includeFields", true);
diff --git a/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
index 5b7a6f950d..6fdc4e5f25 100644
--- a/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
@@ -39,6 +39,13 @@ import java.io.ObjectOutput;
 import java.util.List;
 
 import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveBoolean;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveByte;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveDouble;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveFloat;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveInt;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveLong;
+import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveShort;
 import static org.codehaus.groovy.ast.ClassHelper.make;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
@@ -49,13 +56,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
-import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveBoolean;
-import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveByte;
-import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveDouble;
-import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveFloat;
-import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveInt;
-import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveLong;
-import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveShort;
 import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
 import static org.objectweb.asm.Opcodes.ACC_TRANSIENT;
 
@@ -117,7 +117,7 @@ public class ExternalizeMethodsASTTransformation extends AbstractASTTransformati
             String suffix = suffixForField(fNode);
             MethodCallExpression readObject = callX(varX(oin), "read" + suffix);
             readObject.setImplicitThis(false);
-            body.addStatement(assignS(varX(fNode), suffix.equals("Object") ? castX(GenericsUtils.nonGeneric(fNode.getType()), readObject) : readObject));
+            body.addStatement(assignS(varX(fNode), "Object".equals(suffix) ? castX(GenericsUtils.nonGeneric(fNode.getType()), readObject) : readObject));
         }
         addGeneratedMethod(cNode, "readExternal", ACC_PUBLIC, ClassHelper.VOID_TYPE, params(oin), ClassNode.EMPTY_ARRAY, body);
     }
diff --git a/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java
index 9ad3dafa5e..745bdd6919 100644
--- a/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java
@@ -387,7 +387,7 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
         final Expression obj = mce.getObjectExpression();
         final Expression meth = mce.getMethod();
         return (obj instanceof ClassExpression && meth instanceof ConstantExpression
-                && ((ConstantExpression) meth).getValue().equals("new"));
+                && "new".equals(((ConstantExpression) meth).getValue()));
     }
 
     private Expression transformMethodCall(MethodCallExpression mce, Expression argsExp) {
diff --git a/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
index 0515f6ade8..cc67c0910b 100644
--- a/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
@@ -205,7 +205,7 @@ public class PackageScopeASTTransformation extends AbstractASTTransformation {
         Expression oe = expr.getObjectExpression();
         if (oe instanceof ClassExpression) {
             ClassExpression ce = (ClassExpression) oe;
-            if (ce.getType().getName().equals("groovy.transform.PackageScopeTarget")) {
+            if ("groovy.transform.PackageScopeTarget".equals(ce.getType().getName())) {
                 Expression prop = expr.getProperty();
                 if (prop instanceof ConstantExpression) {
                     String propName = (String) ((ConstantExpression) prop).getValue();
diff --git a/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
index ff7ca91e46..09e7d579a0 100644
--- a/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
@@ -501,7 +501,7 @@ public class RecordTypeASTTransformation extends AbstractASTTransformation imple
                 Expression oe = prop.getObjectExpression();
                 if (oe instanceof ClassExpression) {
                     ClassExpression ce = (ClassExpression) oe;
-                    if (ce.getType().getName().equals("groovy.transform.RecordTypeMode")) {
+                    if ("groovy.transform.RecordTypeMode".equals(ce.getType().getName())) {
                         return RecordTypeMode.valueOf(prop.getPropertyAsString());
                     }
                 }
diff --git a/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java
index eba9f5454e..bdc351a558 100644
--- a/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java
@@ -135,7 +135,7 @@ public class SealedASTTransformation extends AbstractASTTransformation {
                 Expression oe = prop.getObjectExpression();
                 if (oe instanceof ClassExpression) {
                     ClassExpression ce = (ClassExpression) oe;
-                    if (ce.getType().getName().equals("groovy.transform.SealedMode")) {
+                    if ("groovy.transform.SealedMode".equals(ce.getType().getName())) {
                         return SealedMode.valueOf(prop.getPropertyAsString());
                     }
                 }
diff --git a/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
index 9ed3efa996..fd280a2c7d 100644
--- a/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
@@ -77,7 +77,7 @@ public class SynchronizedASTTransformation extends AbstractASTTransformation {
 
     private String determineLock(String value, ClassNode cNode, MethodNode mNode) {
         boolean isStatic = mNode.isStatic();
-        if (value != null && value.length() > 0 && !value.equalsIgnoreCase("$lock")) {
+        if (value != null && value.length() > 0 && !"$lock".equalsIgnoreCase(value)) {
             if (cNode.getDeclaredField(value) == null) {
                 addError("Error during " + MY_TYPE_NAME + " processing: lock field with name '" + value + "' not found in class " + cNode.getName(), mNode);
                 return null;
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index 9f060445bd..c1ee64c85f 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -113,7 +113,7 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
             if (includes != null && includes.contains("super")) {
                 includeSuper = true;
             }
-            if (includeSuper && cNode.getSuperClass().getName().equals("java.lang.Object")) {
+            if (includeSuper && "java.lang.Object".equals(cNode.getSuperClass().getName())) {
                 addError("Error during " + MY_TYPE_NAME + " processing: includeSuper=true but '" + cNode.getName() + "' has no super class.", anno);
             }
             boolean includeNames = memberHasValue(anno, "includeNames", true);
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 6aefc8afd6..e6d6fc4746 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -393,7 +393,7 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
                 Expression oe = prop.getObjectExpression();
                 if (oe instanceof ClassExpression) {
                     ClassExpression ce = (ClassExpression) oe;
-                    if (ce.getType().getName().equals("groovy.transform.DefaultsMode")) {
+                    if ("groovy.transform.DefaultsMode".equals(ce.getType().getName())) {
                         return DefaultsMode.valueOf(prop.getPropertyAsString());
                     }
                 }
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 781835dfc9..80a8318b45 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1554,7 +1554,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
         enclosingTypes.addAll(enclosingTypes.iterator().next().getOuterClasses());
 
         if (objectExpression instanceof ClassExpression) {
-            if (propertyName.equals("this")) {
+            if ("this".equals(propertyName)) {
                 // handle "Outer.this" for any level of nesting
                 ClassNode outer = getType(objectExpression).getGenericsTypes()[0].getType();
 
@@ -1569,7 +1569,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
                     storeType(pexp, outer);
                     return true;
                 }
-            } else if (propertyName.equals("super")) {
+            } else if ("super".equals(propertyName)) {
                 // GROOVY-8299: handle "Iface.super" for interface default methods
                 ClassNode enclosingType = typeCheckingContext.getEnclosingClassNode();
                 ClassNode accessingType = getType(objectExpression).getGenericsTypes()[0].getType();
@@ -1593,7 +1593,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
         for (Receiver<String> receiver : receivers) {
             ClassNode receiverType = receiver.getType();
 
-            if (receiverType.isArray() && propertyName.equals("length")) {
+            if (receiverType.isArray() && "length".equals(propertyName)) {
                 pexp.putNodeMetaData(READONLY_PROPERTY, Boolean.TRUE);
                 storeType(pexp, int_TYPE);
                 if (visitor != null) {
@@ -1671,7 +1671,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
                     getter = current.getGetterMethod(getterName);
                     getter = allowStaticAccessToMember(getter, staticOnly);
                 }
-                if (getter != null && ((publicOnly && (!getter.isPublic() || propertyName.equals("class") || propertyName.equals("empty")))
+                if (getter != null && ((publicOnly && (!getter.isPublic() || "class".equals(propertyName) || "empty".equals(propertyName)))
                         // GROOVY-11319:
                         || !hasAccessToMember(typeCheckingContext.getEnclosingClassNode(), getter.getDeclaringClass(), getter.getModifiers()))) {
                     getter = null;
@@ -2934,7 +2934,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
             return;
         }
         ClassNode type = call.getOwnerType();
-        if (type.isEnum() && name.equals("$INIT")) { // GROOVY-10845: $INIT(Object[]) delegates to constructor
+        if (type.isEnum() && "$INIT".equals(name)) { // GROOVY-10845: $INIT(Object[]) delegates to constructor
             Expression target = typeCheckingContext.getEnclosingBinaryExpression().getLeftExpression();
             ConstructorCallExpression cce = new ConstructorCallExpression(type, call.getArguments());
             cce.setSourcePosition(((FieldExpression) target).getField());
@@ -3663,7 +3663,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
             ClassNode[] args = getArgumentTypes(argumentList);
             boolean functorsVisited = false;
             if (!isThisObjectExpression && receiver.equals(CLOSURE_TYPE)
-                    && (name.equals("call") || name.equals("doCall"))) {
+                    && ("call".equals(name) || "doCall".equals(name))) {
                 if (objectExpression instanceof VariableExpression) {
                     Variable variable = findTargetVariable((VariableExpression) objectExpression);
                     if (variable instanceof ASTNode) {
@@ -3707,7 +3707,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
                 // GROOVY-11386:
                 if (isThisObjectExpression && call.isImplicitThis()
                     && typeCheckingContext.getEnclosingClosure() != null
-                    && !name.equals("call") && !name.equals("doCall")) { // GROOVY-9662
+                    && !"call".equals(name) && !"doCall".equals(name)) { // GROOVY-9662
                     mn = CLOSURE_TYPE.getMethods(name);
                     if (!mn.isEmpty()) {
                         receiver = CLOSURE_TYPE.getPlainNodeReference();
@@ -3737,7 +3737,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
                             }
                         }
                     }
-                    if (mn.isEmpty() && !name.equals("call")) {
+                    if (mn.isEmpty() && !"call".equals(name)) {
                         // GROOVY-5705, GROOVY-5881, GROOVY-6324, GROOVY-11366: closure property
                         var property = propX(objectExpression, call.getMethod(), call.isSafe());
                         property.setImplicitThis(call.isImplicitThis());
@@ -3969,7 +3969,7 @@ out:                if (mn.size() != 1) {
         List<Receiver<String>> owners = new ArrayList<>();
         if (typeCheckingContext.delegationMetadata != null
                 && objectExpression instanceof VariableExpression
-                && ((Variable) objectExpression).getName().equals("owner")
+                && "owner".equals(((Variable) objectExpression).getName())
                 && /*isNested:*/typeCheckingContext.delegationMetadata.getParent() != null) {
             owners.add(new Receiver<>(receiver, "owner")); // if nested, Closure is the first owner
             List<Receiver<String>> thisType = new ArrayList<>(2); // and the enclosing class is the
@@ -4967,7 +4967,7 @@ trying: for (ClassNode[] signature : signatures) {
      */
     protected List<MethodNode> findMethodsWithGenerated(final ClassNode receiver, final String name) {
         if (receiver.isArray()) {
-            if (name.equals("clone")) { // GROOVY-10319: array clone -- <https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.7>
+            if ("clone".equals(name)) { // GROOVY-10319: array clone -- <https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.7>
                 MethodNode clone = new MethodNode("clone", Opcodes.ACC_PUBLIC, OBJECT_TYPE, Parameter.EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, null);
                 clone.setDeclaringClass(OBJECT_TYPE); // retain Object for declaringClass and returnType
                 clone.setNodeMetaData(INFERRED_RETURN_TYPE, receiver);
@@ -5283,7 +5283,7 @@ trying: for (ClassNode[] signature : signatures) {
                 if (parameters != null) {
                     final int n = parameters.length;
                     String parameterName = parameter.getName();
-                    if (n == 0 && parameterName.equals("it")) {
+                    if (n == 0 && "it".equals(parameterName)) {
                         return closureParamTypes.length > 0 ? closureParamTypes[0] : null;
                     }
                     for (int i = 0; i < n; i += 1) {
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
index 8f01493820..0b674c117a 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
@@ -200,7 +200,7 @@ public class Java8 implements VMPlugin {
         ClassNode[] lowers = configureTypes(wildcardType.getLowerBounds());
         ClassNode[] uppers = configureTypes(wildcardType.getUpperBounds());
         // beware of [Object] upper bounds; often it's <?> or <? super T>
-        if (lowers != null || wildcardType.getTypeName().equals("?")) {
+        if (lowers != null || "?".equals(wildcardType.getTypeName())) {
             uppers = null;
         }
 
@@ -257,7 +257,7 @@ public class Java8 implements VMPlugin {
         for (AnnotationNode an : annotations) {
             plugin.configureAnnotationNodeFromDefinition(an, node);
         }
-        if (!node.getClassNode().getName().equals("java.lang.annotation.Retention")) {
+        if (!"java.lang.annotation.Retention".equals(node.getClassNode().getName())) {
             plugin.configureAnnotationNodeFromDefinition(node, node);
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
index c5f10ded70..cb73423a87 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
@@ -92,7 +92,7 @@ public class PluginDefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     public static Object next(final Enum self) {
         for (Method method : self.getClass().getMethods()) {
-            if (method.getName().equals("next") && method.getParameterCount() == 0) {
+            if ("next".equals(method.getName()) && method.getParameterCount() == 0) {
                 return InvokerHelper.invokeMethod(self, "next", InvokerHelper.EMPTY_ARGS);
             }
         }
@@ -112,7 +112,7 @@ public class PluginDefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     public static Object previous(final Enum self) {
         for (Method method : self.getClass().getMethods()) {
-            if (method.getName().equals("previous") && method.getParameterCount() == 0) {
+            if ("previous".equals(method.getName()) && method.getParameterCount() == 0) {
                 return InvokerHelper.invokeMethod(self, "previous", InvokerHelper.EMPTY_ARGS);
             }
         }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
index ad23a106de..ff81afc9cf 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
@@ -619,7 +619,7 @@ public abstract class Selector {
             }
             else if (!mci.hasCustomInvokeMethod()) {
                 String name = this.name;
-                if (name.equals("call") && receiver instanceof GeneratedClosure) {
+                if ("call".equals(name) && receiver instanceof GeneratedClosure) {
                     name = "doCall";
                 }
                 method = mci.getMethodWithCaching(selectionBase, name, newArgs, false);
@@ -639,7 +639,7 @@ public abstract class Selector {
             isCategoryMethod = (method instanceof CategoryMethod);
 
             if (metaMethod instanceof NumberNumberMetaMethod
-                    || (method instanceof GeneratedMetaMethod && (name.equals("next") || name.equals("previous")))) {
+                    || (method instanceof GeneratedMetaMethod && ("next".equals(name) || "previous".equals(name)))) {
                 if (LOG_ENABLED) LOG.info("meta method is number method");
                 if (IndyMath.chooseMathMethod(this, metaMethod)) {
                     catchException = false;
@@ -666,7 +666,7 @@ public abstract class Selector {
                 try {
                     var declaringClass = cm.getDeclaringClass().getTheClass();
                     int parameterCount = cm.getParamsCount();
-                    if (parameterCount == 0 && name.equals("clone") && declaringClass == Object.class) {
+                    if (parameterCount == 0 && "clone".equals(name) && declaringClass == Object.class) {
                         var receiverClass = getCorrectedReceiver().getClass();
                         if (receiverClass.isArray()) { // GROOVY-10733, et al.
                             handle = MethodHandles.publicLookup().findVirtual(receiverClass, "clone", MethodType.methodType(Object.class));
@@ -675,7 +675,7 @@ public abstract class Selector {
                                                                     .bindTo(new CloneNotSupportedException());
                             handle = MethodHandles.dropArguments(handle, 0, Object.class); // discard receiver
                         }
-                    } else if (parameterCount == 1 && name.equals("forName") && declaringClass == Class.class) {
+                    } else if (parameterCount == 1 && "forName".equals(name) && declaringClass == Class.class) {
                         handle = MethodHandles.insertArguments(CLASS_FOR_NAME, 1, Boolean.TRUE, sender.getClassLoader());
                     } else {
                         handle = unreflect(cm.getCachedMethod());
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
index 646605a7d6..a0f6b3c569 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -216,7 +216,7 @@ public class Java9 extends Java8 {
 
     private Optional<CachedMethod> transformDirectAccess(final Class<?> metaClass, final CachedMethod metaMethod, final Class<?> caller) {
         Class<?>[] paramTypes = metaMethod.getPT();
-        if (metaClass == BigInteger.class && paramTypes.length == 1 && metaMethod.getName().equals("multiply")) {
+        if (metaClass == BigInteger.class && paramTypes.length == 1 && "multiply".equals(metaMethod.getName())) {
             Class<?> type = paramTypes[0];
             if (type == Long.class || type == long.class
                     || type == Integer.class || type == int.class