langtools/test/tools/javac/generics/OverrideBridge.java
author mcimadamore
Tue, 02 Nov 2010 12:00:54 +0000
changeset 7080 66bab13849fb
parent 6591 a953c8c6b85e
child 17544 80db48a54a9f
permissions -rw-r--r--
6996415: Override bridges causes compiler-generated code to end up with synthetic infinite loop Summary: temporarily disable fix for override bridges (6337171) Reviewed-by: jjg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6591
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     1
/*
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     2
 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     4
 *
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     7
 * published by the Free Software Foundation.
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     8
 *
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    13
 * accompanied this code).
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    14
 *
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    18
 *
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    21
 * questions.
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    22
 */
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    23
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    24
/*
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    25
 * @test
7080
66bab13849fb 6996415: Override bridges causes compiler-generated code to end up with synthetic infinite loop
mcimadamore
parents: 6591
diff changeset
    26
 * @bug 6337171 6996415
66bab13849fb 6996415: Override bridges causes compiler-generated code to end up with synthetic infinite loop
mcimadamore
parents: 6591
diff changeset
    27
 * @ignore fix has been disabled as a consequence of 6996415
6591
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    28
 * @summary  javac should create bridge methods when type variable bounds restricted
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    29
 * @run main OverrideBridge
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    30
 */
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    31
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    32
import java.io.*;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    33
import java.net.URI;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    34
import java.util.ArrayList;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    35
import java.util.Arrays;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    36
import java.util.List;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    37
import java.util.Map;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    38
import java.util.HashMap;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    39
import javax.tools.JavaCompiler;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    40
import javax.tools.JavaFileObject;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    41
import javax.tools.SimpleJavaFileObject;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    42
import javax.tools.ToolProvider;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    43
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    44
import com.sun.source.util.JavacTask;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    45
import com.sun.tools.classfile.ClassFile;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    46
import com.sun.tools.classfile.ConstantPoolException;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    47
import com.sun.tools.classfile.Descriptor.InvalidDescriptor;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    48
import com.sun.tools.classfile.Method;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    49
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    50
public class OverrideBridge {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    51
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    52
    enum Implementation {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    53
        IMPLICIT(""),
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    54
        EXPLICIT("@Override public abstract X m(X x);");
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    55
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    56
        String impl;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    57
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    58
        Implementation(String impl) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    59
            this.impl = impl;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    60
        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    61
    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    62
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    63
    static class JavaSource extends SimpleJavaFileObject {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    64
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    65
        final static String sourceStub =
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    66
                        "abstract class A<X> {\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    67
                        "   public abstract X m(X x);\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    68
                        "}\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    69
                        "interface I<X> {\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    70
                        "X m(X x);\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    71
                        "}\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    72
                        "abstract class B<X extends B<X>> extends A<X> implements I<X> { #B }\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    73
                        "abstract class C<X extends C<X>> extends B<X>  { #C }\n" +
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    74
                        "abstract class D<X extends D<X>> extends C<X>  { #D }\n";
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    75
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    76
        String source;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    77
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    78
        public JavaSource(Implementation implB, Implementation implC, Implementation implD) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    79
            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    80
            source = sourceStub.replace("#B", implB.impl).replace("#C", implC.impl).replace("#D", implD.impl);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    81
        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    82
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    83
        @Override
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    84
        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    85
            return source;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    86
        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    87
    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    88
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    89
    public static void main(String... args) throws Exception {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    90
        Map<ClassFile, List<Method>> refMembers =
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    91
                compile(Implementation.EXPLICIT, Implementation.EXPLICIT, Implementation.EXPLICIT, "ref");
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    92
        int i = 0;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    93
        for (Implementation implB : Implementation.values()) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    94
            for (Implementation implC : Implementation.values()) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    95
                for (Implementation implD : Implementation.values()) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    96
                    Map<ClassFile, List<Method>> membersToCheck = compile(implB, implC, implD, "out_" + i++);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    97
                    check(refMembers, membersToCheck);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    98
                }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
    99
            }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   100
        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   101
    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   102
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   103
    static String workDir = System.getProperty("user.dir");
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   104
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   105
    static Map<ClassFile, List<Method>> compile(Implementation implB, Implementation implC, Implementation implD, String destPath) throws Exception {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   106
        File destDir = new File(workDir, destPath); destDir.mkdir();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   107
        final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   108
        JavaSource source = new JavaSource(implB, implC, implD);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   109
        JavacTask ct = (JavacTask)tool.getTask(null, null, null,
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   110
                Arrays.asList("-d", destPath), null, Arrays.asList(source));
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   111
        ct.generate();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   112
        Map<ClassFile, List<Method>> members = new HashMap<>();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   113
        addMembers(destDir, members);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   114
        return members;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   115
    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   116
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   117
    static void addMembers(File destDir, Map<ClassFile, List<Method>> members) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   118
        String[] names = { "B.class", "C.class", "D.class" };
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   119
        try {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   120
            for (String name : names) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   121
                File f = new File(destDir, name);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   122
                ClassFile cf = ClassFile.read(f);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   123
                members.put(cf, readMethod(cf, "m"));
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   124
            }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   125
        } catch (Exception e) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   126
            e.printStackTrace();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   127
            throw new Error("error reading classes");
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   128
        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   129
    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   130
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   131
    static List<Method> readMethod(ClassFile cf, String name) throws ConstantPoolException {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   132
        List<Method> buf = new ArrayList<>();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   133
        for (Method m : cf.methods) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   134
            if (m.getName(cf.constant_pool).equals(name)) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   135
                buf.add(m);
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   136
            }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   137
        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   138
        return buf;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   139
    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   140
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   141
    static void check(Map<ClassFile, List<Method>> refMembers, Map<ClassFile, List<Method>> membersToCheck) throws ConstantPoolException, InvalidDescriptor {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   142
        for (Map.Entry<ClassFile, List<Method>> ref : refMembers.entrySet()) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   143
            ClassFile cRef = ref.getKey();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   144
            for (Method mRef : ref.getValue()) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   145
                boolean ok = false;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   146
                for (Map.Entry<ClassFile, List<Method>> toCheck : membersToCheck.entrySet()) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   147
                    ClassFile cToCheck = toCheck.getKey();
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   148
                    for (Method mToCheck : toCheck.getValue()) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   149
                        if (cRef.getName().equals(cToCheck.getName()) &&
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   150
                                mRef.descriptor.getReturnType(cRef.constant_pool).equals(
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   151
                                mToCheck.descriptor.getReturnType(cToCheck.constant_pool)) &&
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   152
                                mRef.descriptor.getParameterTypes(cRef.constant_pool).equals(
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   153
                                mToCheck.descriptor.getParameterTypes(cToCheck.constant_pool))) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   154
                            ok = true;
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   155
                        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   156
                    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   157
                }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   158
                if (!ok) {
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   159
                    throw new AssertionError("Matching method descriptor for " + mRef.descriptor.getParameterTypes(cRef.constant_pool) + "not found");
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   160
                }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   161
            }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   162
        }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   163
    }
a953c8c6b85e 6337171: javac should create bridge methods when type variable bounds restricted
mcimadamore
parents:
diff changeset
   164
}