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 2022/08/07 09:42:39 UTC
[groovy] branch master updated: Avoid unnecessary checking for object methods
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 8fa716848e Avoid unnecessary checking for object methods
8fa716848e is described below
commit 8fa716848ea222a59c584b729f1a7b838a86f463
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Aug 7 16:49:08 2022 +0800
Avoid unnecessary checking for object methods
---
src/main/java/org/codehaus/groovy/ast/ClassHelper.java | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
index d4daf9face..ab125faa5d 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
@@ -63,12 +63,15 @@ import java.lang.invoke.SerializedLambda;
import java.lang.ref.SoftReference;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf;
@@ -566,7 +569,12 @@ public class ClassHelper {
for (MethodNode mn : type.getAbstractMethods()) {
// ignore methods that will have an implementation
if (Traits.hasDefaultImplementation(mn)) continue;
- if (OBJECT_TYPE.getDeclaredMethod(mn.getName(), mn.getParameters()) != null) continue;
+
+ final String name = mn.getName();
+ if (OBJECT_METHOD_NAME_SET.contains(name)) {
+ // Avoid unnecessary checking for `Object` methods as possible as we could
+ if (OBJECT_TYPE.getDeclaredMethod(name, mn.getParameters()) != null) continue;
+ }
// we have two methods, so no SAM
if (sam != null) return null;
@@ -629,4 +637,7 @@ public class ClassHelper {
return source.getUnresolvedSuperClass();
}
+
+ private static final Set<String> OBJECT_METHOD_NAME_SET =
+ Collections.unmodifiableSet(Arrays.stream(Object.class.getMethods()).map(m -> m.getName()).collect(Collectors.toSet()));
}