1 #!/bin/sh
   2 
   3 #
   4 # Copyright (c) 2006, 2014 Oracle and/or its affiliates. All rights reserved.
   5 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   6 #
   7 # This code is free software; you can redistribute it and/or modify it
   8 # under the terms of the GNU General Public License version 2 only, as
   9 # published by the Free Software Foundation.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 #  @test
  27 #  @bug 6173560
  28 #  @summary Redefine a class that implements an interface
  29 #    and verify that a subclass calls the right method.
  30 #
  31 #
  32 #  @run shell RedefineImplementor.sh
  33 
  34 compileOptions=-g
  35 
  36 # Uncomment this to see the JDI trace
  37 #jdbOptions=-dbgtrace
  38 
  39 createJavaFile()
  40 {
  41     cat <<EOF > $1.java.1
  42 
  43 public class $1 implements Runnable {
  44     public void run() {
  45         System.out.println("$1's run");
  46         // @1 uncomment System.out.println("This is the new version of $1");
  47     }
  48 
  49     public static void main(String[] args) {
  50         Runnable r = new B();
  51         B.func(r);
  52         B.func(r);  // @1 breakpoint
  53     }
  54 
  55 }
  56 
  57 class B extends $1 {
  58     static void func(Runnable r) {
  59         r.run();
  60     }
  61 }
  62 
  63 EOF
  64 }
  65 
  66 # This is called to feed cmds to jdb.
  67 dojdbCmds()
  68 {
  69     setBkpts @1
  70     runToBkpt @1
  71     redefineClass @1
  72     cmd allowExit cont
  73 }
  74 
  75 
  76 mysetup()
  77 {
  78     if [ -z "$TESTSRC" ] ; then
  79         TESTSRC=.
  80     fi
  81 
  82     for ii in . $TESTSRC $TESTSRC/.. ; do
  83         if [ -r "$ii/ShellScaffold.sh" ] ; then
  84             . $ii/ShellScaffold.sh 
  85             break
  86         fi
  87     done
  88 }
  89 
  90 # You could replace this next line with the contents
  91 # of ShellScaffold.sh and this script will run just the same.
  92 mysetup
  93 
  94 runit
  95 
  96 debuggeeFailIfNotPresent 'This is the new version of '
  97 pass