You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/12/07 22:37:20 UTC
[groovy] branch master updated: GROOVY-6653: MetaMethodIndex: allow bridge method to override
This is an automated email from the ASF dual-hosted git repository.
emilles 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 19ade45 GROOVY-6653: MetaMethodIndex: allow bridge method to override
19ade45 is described below
commit 19ade45010b92ae959d3b06909e99e93d6d07e53
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Dec 7 16:37:04 2021 -0600
GROOVY-6653: MetaMethodIndex: allow bridge method to override
---
.../codehaus/groovy/reflection/CachedClass.java | 3 +-
src/test/groovy/bugs/Groovy6653.java | 53 ++++++++++++++++++++++
2 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
index 8517820..647e98f 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -83,8 +83,7 @@ public class CachedClass {
PrivilegedAction<CachedMethod[]> action = () -> {
try {
return Arrays.stream(getTheClass().getDeclaredMethods())
- // skip synthetic methods inserted by JDK 1.5+ compilers
- .filter(m -> !m.isBridge() && m.getName().indexOf('+') < 0)
+ .filter(m -> m.getName().indexOf('+') < 0) // no synthetic JDK 5+ methods
.filter(m -> ReflectionUtils.checkCanSetAccessible(m, CachedClass.class))
.map(m -> new CachedMethod(CachedClass.this, m))
.toArray(CachedMethod[]::new);
diff --git a/src/test/groovy/bugs/Groovy6653.java b/src/test/groovy/bugs/Groovy6653.java
new file mode 100644
index 0000000..589d20d
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy6653.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package groovy.bugs;
+
+import org.junit.Test;
+
+import static groovy.test.GroovyAssert.assertScript;
+
+public final class Groovy6653 {
+
+ public static abstract class A<T> {
+ protected String getText(T t) {
+ return "A";
+ }
+ }
+
+ public static class C extends A<String> {
+ @Override
+ protected String getText(String s) {
+ return super.getText(s) + "C";
+ }
+ }
+
+ @Test
+ public void testCovariantMethodSuperCall() throws Exception {
+ assertScript(
+ "class D extends " + C.class.getName() + " {\n" +
+ " @Override\n" +
+ " protected String getText(String s) {\n" +
+ " super.getText(s) + 'D'\n" +
+ " }\n" +
+ "}\n" +
+ "String result = new D().getText(null)\n" +
+ "assert result == 'ACD'\n"
+ );
+ }
+}