From 1ad5b8f1606db5f9814f490881c166c8ff0857e2 Mon Sep 17 00:00:00 2001 From: Daniel Sun Date: Sun, 27 Oct 2024 13:24:15 +0800 Subject: [PATCH] Flip operands of `equals` to avoid potential NPE --- .../beans/BindableASTTransformation.java | 6 ++-- .../beans/VetoableASTTransformation.java | 6 ++-- .../grape/GrabAnnotationTransformation.java | 2 +- .../java/groovy/lang/GroovyClassLoader.java | 2 +- .../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 +++--- .../transform/builder/ExternalStrategy.java | 6 ++-- .../java/groovy/util/GroovyScriptEngine.java | 2 +- .../groovy/ast/tools/ClassNodeUtils.java | 4 +-- .../ast/tools/ImmutablePropertyUtils.java | 2 +- .../groovy/ast/tools/VisibilityUtils.java | 2 +- .../org/codehaus/groovy/ast/ClassNode.java | 2 +- .../org/codehaus/groovy/ast/FieldNode.java | 2 +- .../groovy/ast/MixinASTTransformation.java | 2 +- .../org/codehaus/groovy/ast/ModuleNode.java | 8 ++--- .../ast/decompiled/DecompiledClassNode.java | 2 +- .../codehaus/groovy/ast/tools/BeanUtils.java | 2 +- .../groovy/ast/tools/ClosureUtils.java | 4 +-- .../groovy/ast/tools/GeneralUtils.java | 2 +- .../codehaus/groovy/classgen/EnumVisitor.java | 31 +++++++++++++++++-- .../groovy/classgen/ExtendedVerifier.java | 8 ++--- .../groovy/classgen/GeneratorContext.java | 2 +- .../groovy/classgen/InnerClassVisitor.java | 2 +- .../groovy/classgen/VariableScopeVisitor.java | 4 +-- .../codehaus/groovy/classgen/Verifier.java | 2 +- .../groovy/classgen/asm/CompileStack.java | 4 +-- .../groovy/control/ClassNodeResolver.java | 2 +- .../groovy/control/CompilerConfiguration.java | 14 ++++----- .../groovy/control/PlaceholderVisitor.java | 8 ++--- .../groovy/control/ResolveVisitor.java | 10 +++--- .../groovy/control/StaticImportVisitor.java | 2 +- .../groovy/reflection/MixinInMetaClass.java | 2 +- .../groovy/runtime/DefaultGroovyMethods.java | 2 +- .../groovy/runtime/MetaClassHelper.java | 4 +-- .../runtime/metaclass/ClosureMetaMethod.java | 2 +- .../DefaultTypeTransformation.java | 4 +-- .../codehaus/groovy/tools/DgmConverter.java | 4 +-- .../groovy/tools/javac/JavaStubGenerator.java | 13 ++++---- .../groovy/tools/javac/JavacJavaCompiler.java | 2 +- .../transform/AutoCloneASTTransformation.java | 2 +- .../BaseScriptASTTransformation.java | 2 +- .../EqualsAndHashCodeASTTransformation.java | 2 +- .../ExternalizeMethodsASTTransformation.java | 16 +++++----- .../transform/NewifyASTTransformation.java | 2 +- .../PackageScopeASTTransformation.java | 2 +- .../RecordTypeASTTransformation.java | 2 +- .../transform/SealedASTTransformation.java | 2 +- .../SynchronizedASTTransformation.java | 2 +- .../transform/ToStringASTTransformation.java | 2 +- .../TupleConstructorASTTransformation.java | 2 +- .../stc/StaticTypeCheckingVisitor.java | 22 ++++++------- .../codehaus/groovy/vmplugin/v8/Java8.java | 4 +-- .../v8/PluginDefaultGroovyMethods.java | 4 +-- .../codehaus/groovy/vmplugin/v8/Selector.java | 8 ++--- .../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 4e13e5eec81..d362e37c71f 100644 --- a/src/main/java/groovy/beans/BindableASTTransformation.java +++ b/src/main/java/groovy/beans/BindableASTTransformation.java @@ -263,9 +263,9 @@ protected boolean needsPropertyChangeSupport(ClassNode declaringClass, SourceUni 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 ea378777580..24774f283a7 100644 --- a/src/main/java/groovy/beans/VetoableASTTransformation.java +++ b/src/main/java/groovy/beans/VetoableASTTransformation.java @@ -257,9 +257,9 @@ protected boolean needsVetoableChangeSupport(ClassNode declaringClass, SourceUni 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 fb318126e27..1190c95b8b0 100644 --- a/src/main/java/groovy/grape/GrabAnnotationTransformation.java +++ b/src/main/java/groovy/grape/GrabAnnotationTransformation.java @@ -566,7 +566,7 @@ private static void checkForConvenienceForm(final AnnotationNode node, final boo for (Map.Entry 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 3b734ced40b..afaa29bb01e 100644 --- a/src/main/java/groovy/lang/GroovyClassLoader.java +++ b/src/main/java/groovy/lang/GroovyClassLoader.java @@ -774,7 +774,7 @@ private static String decodeFileName(final String fileName) { } 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 1cac6fc5069..421efef6d64 100644 --- a/src/main/java/groovy/lang/GroovyRuntimeException.java +++ b/src/main/java/groovy/lang/GroovyRuntimeException.java @@ -85,7 +85,7 @@ protected String getLocationText() { 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 c6bd035ffe6..97922fb8281 100644 --- a/src/main/java/groovy/lang/GroovyShell.java +++ b/src/main/java/groovy/lang/GroovyShell.java @@ -211,7 +211,7 @@ public Object run(final File scriptFile, String[] args) throws CompilationFailed 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 d483e3a9d3a..427d4b4e608 100644 --- a/src/main/java/groovy/lang/MetaClassImpl.java +++ b/src/main/java/groovy/lang/MetaClassImpl.java @@ -1220,7 +1220,7 @@ public Object invokeMethod(final Class sender, final Object object, final String } 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 @@ protected static long handleMatches(long matchesDistance, LinkedList matches, Ob } 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 28181afb54a..4ba0fb0b3d3 100644 --- a/src/main/java/groovy/namespace/QName.java +++ b/src/main/java/groovy/namespace/QName.java @@ -215,8 +215,8 @@ public boolean matches(Object o) { 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 boolean matches(Object o) { 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 int hashCode() { 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 8be1dfb29c7..f5076e93f90 100644 --- a/src/main/java/groovy/transform/builder/ExternalStrategy.java +++ b/src/main/java/groovy/transform/builder/ExternalStrategy.java @@ -137,7 +137,7 @@ private static MethodNode createBuildMethod(BuilderASTTransformation transform, } 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 @@ private MethodNode createBuilderMethodForField(ClassNode builderClass, PropertyI 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 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 c0f37ff348e..15775d8752b 100644 --- a/src/main/java/groovy/util/GroovyScriptEngine.java +++ b/src/main/java/groovy/util/GroovyScriptEngine.java @@ -319,7 +319,7 @@ public static void main(String[] urls) throws Exception { 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 03e0e9ffcb9..2ad8badba15 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 static boolean isSubtype(final ClassNode maybeExtendedOrImplemented, fina //-------------------------------------------------------------------------- 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 711fcf7e2e2..a79d845545e 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 static String createErrorMessage(final String className, final String fie } 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 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 b750b01c164..24006689ae5 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 @@ private static Visibility getVisForAnnotation(final Class staticFieldInitializ 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 b8d1e12a5cc..4f33f65d3cd 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 void setInitialValueExpression(Expression initialValueExpression) { @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 db86fe18099..a98e53ba450 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 void visit(final ASTNode[] nodes, final SourceUnit source) { 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 3a923cb8537..8c7edf3bf23 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 @@ protected ClassNode createStatementsClass() { 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 @@ private MethodNode handleMainMethodIfPresent(final List methods) { 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 e919d090db3..1957cd46bb6 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 boolean isSealed() { List 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 9ddf976a515..0e68469484a 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 static void addPseudoProperties(ClassNode origType, ClassNode cNode, List 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 f9e59d54c56..d0788f6fa4f 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 static String convertClosureToSource(final ReaderSource readerSource, fin 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 static boolean hasSingleCharacterArg(final Closure c) { 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 f94be91dc7c..fb56bded7a6 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 static void copyAnnotatedNodeAnnotations(final AnnotatedNode annotatedNod 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 6ac3c48b7ee..a29076de97f 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 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 @@ private static void addMethods(final ClassNode enumClass, final FieldNode values 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 a153b642330..5e761c02400 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 @@ private void visitAnnotations(final AnnotatedNode node, final List 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 51d26ada89c..34105073e87 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 @@ private void checkPropertyOnExplicitThis(final PropertyExpression expression) { 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 1f7c001abef..1368603938a 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 void visitMethod(final MethodNode node) { } 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 e302b48cad4..edfc98f6032 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 BytecodeVariable getVariable(final String variableName) { * @return the normal variable or null if not found (and mustExist 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 94e83178537..7a9c037d07b 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 @@ private static boolean isSourceNewer(final URL source, final ClassNode cls) { 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 f2036dca895..ee54727ab0c 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 void configure(final Properties configuration) throws ConfigurationExcept 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 void configure(final Properties configuration) throws ConfigurationExcept 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 void configure(final Properties configuration) throws ConfigurationExcept 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 void configure(final Properties configuration) throws ConfigurationExcept 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 7beea392ec4..d0e5a44c7a8 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 void visitDeclarationExpression(DeclarationExpression expression) { 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 void visitClosureExpression(ClosureExpression expression) { 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 b638af3f3fd..9921c0b40c5 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 @@ private static String lookupClassName(final PropertyExpression pe) { 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 classNameInfo = makeClassName(doInitialClassTest, name, property); @@ -898,7 +898,7 @@ private static Expression correctClassClassChain(final PropertyExpression pe) { 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 @@ private void checkThisAndSuperAsPropertyAccess(final PropertyExpression expressi 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 @@ private void checkThisAndSuperAsPropertyAccess(final PropertyExpression expressi 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 999f9452313..dc4dd8e96f7 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 @@ && hasPossibleStaticProperty(cn, name)) { 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 13e7d22c10e..90fc73d1d23 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 static void mixinClassesToMetaClass(MetaClass self, List categoryC 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 88c984c3884..f7ed8afc615 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 static String dump(Object self) { 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 735aa0c569e..d74e032a93b 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 @@ private static int getParameterCount(final Class closureOrLambdaClass) { 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 @@ private static boolean isIntegerLongShortByte(Class classToTransformFrom) { } 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 037080aabbb..3af6d3242d0 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 static List createMethodList(final String name, final Class d } } 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 dc7674daaa1..74ec06c9088 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 static boolean isEnumSubclass(Object value) { 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 static int[] convertToIntArray(Object a) { 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 32d2b9b1d63..c9cc4b5b019 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 ea24247a831..c0a1cdd0bc5 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 javax.tools.FileObject; import javax.tools.JavaFileObject; - import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -509,9 +508,9 @@ private void printMethods(final PrintWriter out, final ClassNode classNode, fina // 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 @@ private static ClassNode getConstructorArgumentType(final Expression arg, final 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 @@ private void printMethod(final PrintWriter out, final ClassNode classNode, final ClassNode rt = methodNode.getReturnType(); Consumer 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 @@ private boolean hasPackageScopeXform(final AnnotatedNode node, final PackageScop 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 void visitPropertyExpression(final PropertyExpression property) { 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 c49dc2bc5ea..ef7835e8206 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 @@ private List makeParameters(GroovyClassLoader parentClassLoader) { 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 0916d79dccd..7f631f56a26 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 @@ private static AutoCloneStyle getStyle(AnnotationNode node, String name) { 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 55a193821a0..ed89ebd301f 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 @@ private void changeBaseScriptType(final AnnotatedNode parent, final ClassNode cN } 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 0d5bd80d679..cf724f83569 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 void visit(ASTNode[] nodes, SourceUnit source) { 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 5b7a6f950d2..6fdc4e5f259 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.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.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 @@ private static void createReadExternal(ClassNode cNode, List excludes, L 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 9ad3dafa5e4..745bdd69196 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 @@ private static boolean isNewMethodStyle(MethodCallExpression mce) { 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 0515f6ade8d..cc67c0910b1 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 @@ private static groovy.transform.PackageScopeTarget extractTarget(PropertyExpress 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 ff7ca91e464..09e7d579a01 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 @@ private static RecordTypeMode getMode(AnnotationNode node, String name) { 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 eba9f5454ea..bdc351a5588 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 @@ private static SealedMode getMode(AnnotationNode node, String name) { 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 9ed3efa9966..fd280a2c7de 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 void visit(ASTNode[] nodes, SourceUnit source) { 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 9f060445bd4..c1ee64c85f0 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 void visit(ASTNode[] nodes, SourceUnit source) { 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 6aefc8afd6d..e6d6fc4746a 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 @@ private static DefaultsMode maybeDefaultsMode(final AnnotationNode node, final S 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 781835dfc99..80a8318b455 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 @@ protected boolean existsProperty(final PropertyExpression pexp, final boolean re 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 @@ protected boolean existsProperty(final PropertyExpression pexp, final boolean re 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 @@ protected boolean existsProperty(final PropertyExpression pexp, final boolean re for (Receiver 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 @@ else if (field != null && enclosingTypes.contains(current) && storeField(field, 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 @@ public void visitStaticMethodCallExpression(final StaticMethodCallExpression cal 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 @@ public void visitMethodCallExpression(final MethodCallExpression call) { 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 @@ public void visitMethodCallExpression(final MethodCallExpression call) { // 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 @@ public void visitMethodCallExpression(final MethodCallExpression call) { } } } - 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 @@ protected List> makeOwnerList(final Expression objectExpression List> 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> thisType = new ArrayList<>(2); // and the enclosing class is the @@ -4967,7 +4967,7 @@ protected boolean areCategoryMethodCalls(final List foundMethods, fi */ protected List findMethodsWithGenerated(final ClassNode receiver, final String name) { if (receiver.isArray()) { - if (name.equals("clone")) { // GROOVY-10319: array clone -- + if ("clone".equals(name)) { // GROOVY-10319: array clone -- 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 @@ private ClassNode getTypeFromClosureArguments(final Parameter parameter) { 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 8f014938204..0b674c117ad 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 @@ private ClassNode configureWildcardType(final WildcardType wildcardType) { ClassNode[] lowers = configureTypes(wildcardType.getLowerBounds()); ClassNode[] uppers = configureTypes(wildcardType.getUpperBounds()); // beware of [Object] upper bounds; often it's or - if (lowers != null || wildcardType.getTypeName().equals("?")) { + if (lowers != null || "?".equals(wildcardType.getTypeName())) { uppers = null; } @@ -257,7 +257,7 @@ public void configureAnnotation(final AnnotationNode node) { 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 c5f10ded709..cb73423a87a 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 @@ private PluginDefaultGroovyMethods() { */ 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 static Object next(final Enum self) { */ 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 ad23a106de0..ff81afc9cf6 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 void chooseMeta(MetaClassImpl mci) { } 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 void setHandleForMetaMethod() { 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 void setHandleForMetaMethod() { 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 void setHandleForMetaMethod() { .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 646605a7d6a..a0f6b3c5697 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 MetaMethod transformMetaMethod(final MetaClass metaClass, final MetaMetho private Optional 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