test/tools/javac/QualifiedThisAndSuper_1.java

Thu, 31 Aug 2017 15:17:03 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:17:03 +0800
changeset 2525
2eb010b6cb22
parent 554
9d9f26857129
parent 0
959103a6100f
permissions
-rw-r--r--

merge

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation.
aoqi@0 8 *
aoqi@0 9 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 * accompanied this code).
aoqi@0 14 *
aoqi@0 15 * You should have received a copy of the GNU General Public License version
aoqi@0 16 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 *
aoqi@0 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 * or visit www.oracle.com if you need additional information or have any
aoqi@0 21 * questions.
aoqi@0 22 */
aoqi@0 23
aoqi@0 24 /*
aoqi@0 25 * @test
aoqi@0 26 * @bug 4147520
aoqi@0 27 * @summary Verify correct implementation of qualified 'this' and 'super'.
aoqi@0 28 * @author maddox
aoqi@0 29 *
aoqi@0 30 * @run compile QualifiedThisAndSuper_1.java
aoqi@0 31 * @run main QualifiedThisAndSuper_1
aoqi@0 32 */
aoqi@0 33
aoqi@0 34 public class QualifiedThisAndSuper_1 {
aoqi@0 35
aoqi@0 36 public class AS {
aoqi@0 37 String s = "ass";
aoqi@0 38 private String t = "ast";
aoqi@0 39 protected String u = "asu";
aoqi@0 40 String m() { return "asm"; }
aoqi@0 41 private String n() { return "asn"; }
aoqi@0 42 protected String o() { return "aso"; }
aoqi@0 43 }
aoqi@0 44
aoqi@0 45 public class BS {
aoqi@0 46 String s = "bss";
aoqi@0 47 private String t = "bst";
aoqi@0 48 protected String u = "bsu";
aoqi@0 49 String m() { return "bsm"; }
aoqi@0 50 private String n() { return "bsn"; }
aoqi@0 51 protected String o() { return "bso"; }
aoqi@0 52 }
aoqi@0 53
aoqi@0 54 public class CS {
aoqi@0 55 String s = "css";
aoqi@0 56 private String t = "cst";
aoqi@0 57 protected String u = "csu";
aoqi@0 58 String m() { return "csm"; }
aoqi@0 59 private String n() { return "csn"; }
aoqi@0 60 protected String o() { return "cso"; }
aoqi@0 61 }
aoqi@0 62
aoqi@0 63
aoqi@0 64 void check(String expr, String result, String expected) {
aoqi@0 65 if (!result.equals(expected)) {
aoqi@0 66 throw new Error("Evaluated "+ expr +
aoqi@0 67 " : result " + result + ", expected " + expected);
aoqi@0 68 }
aoqi@0 69 }
aoqi@0 70
aoqi@0 71 public class A extends AS {
aoqi@0 72 A() { super(); }
aoqi@0 73 String s = "as";
aoqi@0 74 private String t = "at";
aoqi@0 75 protected String u = "au";
aoqi@0 76 String m() { return "am"; }
aoqi@0 77 private String n() { return "an"; }
aoqi@0 78 protected String o() { return "ao"; }
aoqi@0 79 public class B extends BS {
aoqi@0 80 B() { super(); }
aoqi@0 81 String s = "bs";
aoqi@0 82 private String t = "bt";
aoqi@0 83 protected String u = "bu";
aoqi@0 84 String m() { return "bm"; }
aoqi@0 85 private String n() { return "bn"; }
aoqi@0 86 protected String o() { return "bo"; }
aoqi@0 87 public class C extends CS {
aoqi@0 88 C() { super(); }
aoqi@0 89 String s = "cs";
aoqi@0 90 private String t = "ct";
aoqi@0 91 protected String u = "cu";
aoqi@0 92 String m() { return "cm"; }
aoqi@0 93 private String n() { return "cn"; }
aoqi@0 94 protected String o() { return "co"; }
aoqi@0 95 void test() {
aoqi@0 96
aoqi@0 97 check("this.m()", this.m(), "cm");
aoqi@0 98
aoqi@0 99 check("A.this.m()", A.this.m(), "am");
aoqi@0 100 check("B.this.m()", B.this.m(), "bm");
aoqi@0 101 check("C.this.m()", C.this.m(), "cm");
aoqi@0 102
aoqi@0 103 check("super.m()", super.m(), "csm");
aoqi@0 104
aoqi@0 105 check("A.super.m()", A.super.m(), "asm");
aoqi@0 106 check("B.super.m()", B.super.m(), "bsm");
aoqi@0 107 check("C.super.m()", C.super.m(), "csm");
aoqi@0 108
aoqi@0 109 // should re-use access methods.
aoqi@0 110 check("A.super.m()", A.super.m(), "asm");
aoqi@0 111 check("B.super.m()", B.super.m(), "bsm");
aoqi@0 112 check("C.super.m()", C.super.m(), "csm");
aoqi@0 113
aoqi@0 114 //---
aoqi@0 115
aoqi@0 116 check("this.n()", this.n(), "cn");
aoqi@0 117
aoqi@0 118 check("A.this.n()", A.this.n(), "an");
aoqi@0 119 check("B.this.n()", B.this.n(), "bn");
aoqi@0 120 check("C.this.n()", C.this.n(), "cn");
aoqi@0 121
aoqi@0 122
aoqi@0 123 check("super.n()", super.n(), "csn");
aoqi@0 124
aoqi@0 125
aoqi@0 126
aoqi@0 127 check("A.super.n()", A.super.n(), "asn");
aoqi@0 128
aoqi@0 129 check("B.super.n()", B.super.n(), "bsn");
aoqi@0 130 check("C.super.n()", C.super.n(), "csn");
aoqi@0 131
aoqi@0 132 // should re-use access methods.
aoqi@0 133 check("A.super.n()", A.super.n(), "asn");
aoqi@0 134 check("B.super.n()", B.super.n(), "bsn");
aoqi@0 135 check("C.super.n()", C.super.n(), "csn");
aoqi@0 136
aoqi@0 137 //---
aoqi@0 138
aoqi@0 139 check("this.o()", this.o(), "co");
aoqi@0 140
aoqi@0 141 check("A.this.o()", A.this.o(), "ao");
aoqi@0 142 check("B.this.o()", B.this.o(), "bo");
aoqi@0 143 check("C.this.o()", C.this.o(), "co");
aoqi@0 144
aoqi@0 145 check("super.o()", super.o(), "cso");
aoqi@0 146
aoqi@0 147 check("A.super.o()", A.super.o(), "aso");
aoqi@0 148 check("B.super.o()", B.super.o(), "bso");
aoqi@0 149 check("C.super.o()", C.super.o(), "cso");
aoqi@0 150
aoqi@0 151 // should re-use access methods.
aoqi@0 152 check("A.super.o()", A.super.o(), "aso");
aoqi@0 153 check("B.super.o()", B.super.o(), "bso");
aoqi@0 154 check("C.super.o()", C.super.o(), "cso");
aoqi@0 155
aoqi@0 156 //---
aoqi@0 157
aoqi@0 158 check("this.s", this.s, "cs");
aoqi@0 159
aoqi@0 160 check("A.this.s", A.this.s, "as");
aoqi@0 161 check("B.this.s", B.this.s, "bs");
aoqi@0 162 check("C.this.s", C.this.s, "cs");
aoqi@0 163
aoqi@0 164 //---
aoqi@0 165
aoqi@0 166 check("this.t", this.t, "ct");
aoqi@0 167
aoqi@0 168 check("A.this.t", A.this.t, "at");
aoqi@0 169 check("B.this.t", B.this.t, "bt");
aoqi@0 170 check("C.this.t", C.this.t, "ct");
aoqi@0 171
aoqi@0 172 //---
aoqi@0 173
aoqi@0 174 check("this.u", this.u, "cu");
aoqi@0 175
aoqi@0 176 check("A.this.u", A.this.u, "au");
aoqi@0 177 check("B.this.u", B.this.u, "bu");
aoqi@0 178 check("C.this.u", C.this.u, "cu");
aoqi@0 179
aoqi@0 180 //---
aoqi@0 181
aoqi@0 182 check("super.s", super.s, "css");
aoqi@0 183
aoqi@0 184 check("A.super.s", A.super.s, "ass");
aoqi@0 185 check("B.super.s", B.super.s, "bss");
aoqi@0 186 check("C.super.s", C.super.s, "css");
aoqi@0 187
aoqi@0 188 //---
aoqi@0 189
aoqi@0 190 check("super.t", super.t, "cst");
aoqi@0 191
aoqi@0 192 check("A.super.t", A.super.t, "ast");
aoqi@0 193 check("B.super.t", B.super.t, "bst");
aoqi@0 194 check("C.super.t", C.super.t, "cst");
aoqi@0 195
aoqi@0 196 //---
aoqi@0 197
aoqi@0 198 check("super.u", super.u, "csu");
aoqi@0 199
aoqi@0 200 check("A.super.u", A.super.u, "asu");
aoqi@0 201 check("B.super.u", B.super.u, "bsu");
aoqi@0 202 check("C.super.u", C.super.u, "csu");
aoqi@0 203
aoqi@0 204 //---
aoqi@0 205
aoqi@0 206 A.this.s = "foo";
aoqi@0 207 System.out.println(A.this.s);
aoqi@0 208 check("A.this.s", A.this.s, "foo");
aoqi@0 209 B.this.s = "bar";
aoqi@0 210 System.out.println(B.this.s);
aoqi@0 211 check("B.this.s", B.this.s, "bar");
aoqi@0 212 C.this.s = "baz";
aoqi@0 213 System.out.println(C.this.s);
aoqi@0 214 check("C.this.s", C.this.s, "baz");
aoqi@0 215
aoqi@0 216 A.this.t = "foo";
aoqi@0 217 System.out.println(A.this.t);
aoqi@0 218 check("A.this.t", A.this.t, "foo");
aoqi@0 219 B.this.t = "bar";
aoqi@0 220 System.out.println(B.this.t);
aoqi@0 221 check("B.this.t", B.this.t, "bar");
aoqi@0 222 C.this.t = "baz";
aoqi@0 223 System.out.println(C.this.t);
aoqi@0 224 check("C.this.t", C.this.t, "baz");
aoqi@0 225
aoqi@0 226 A.this.u = "foo";
aoqi@0 227 System.out.println(A.this.u);
aoqi@0 228 check("A.this.u", A.this.u, "foo");
aoqi@0 229 B.this.u = "bar";
aoqi@0 230 System.out.println(B.this.u);
aoqi@0 231 check("B.this.u", B.this.u, "bar");
aoqi@0 232 C.this.u = "baz";
aoqi@0 233 System.out.println(C.this.u);
aoqi@0 234 check("C.this.u", C.this.u, "baz");
aoqi@0 235
aoqi@0 236 A.super.s = "foo";
aoqi@0 237 System.out.println(A.super.s);
aoqi@0 238 check("A.super.s", A.super.s, "foo");
aoqi@0 239 B.super.s = "bar";
aoqi@0 240 System.out.println(B.super.s);
aoqi@0 241 check("B.super.s", B.super.s, "bar");
aoqi@0 242 C.super.s = "baz";
aoqi@0 243 System.out.println(C.super.s);
aoqi@0 244 check("C.super.s", C.super.s, "baz");
aoqi@0 245
aoqi@0 246 A.super.t = "foo";
aoqi@0 247 System.out.println(A.super.t);
aoqi@0 248 check("A.super.t", A.super.t, "foo");
aoqi@0 249 B.super.t = "bar";
aoqi@0 250 System.out.println(B.super.t);
aoqi@0 251 check("B.super.t", B.super.t, "bar");
aoqi@0 252 C.super.t = "baz";
aoqi@0 253 System.out.println(C.super.t);
aoqi@0 254 check("C.super.t", C.super.t, "baz");
aoqi@0 255
aoqi@0 256 A.super.u = "foo";
aoqi@0 257 System.out.println(A.super.u);
aoqi@0 258 check("A.super.u", A.super.u, "foo");
aoqi@0 259 B.super.u = "bar";
aoqi@0 260 System.out.println(B.super.u);
aoqi@0 261 check("B.super.u", B.super.u, "bar");
aoqi@0 262 C.super.u = "baz";
aoqi@0 263 System.out.println(C.super.u);
aoqi@0 264 check("C.super.u", C.super.u, "baz");
aoqi@0 265
aoqi@0 266 }
aoqi@0 267 }
aoqi@0 268 void test() throws Exception {
aoqi@0 269 C c = new C();
aoqi@0 270 c.test();
aoqi@0 271 }
aoqi@0 272 }
aoqi@0 273 void test() throws Exception {
aoqi@0 274 B b = new B();
aoqi@0 275 b.test();
aoqi@0 276 }
aoqi@0 277 }
aoqi@0 278
aoqi@0 279 public static void main(String[] args) throws Exception {
aoqi@0 280 A a = new QualifiedThisAndSuper_1().new A();
aoqi@0 281 a.test();
aoqi@0 282 }
aoqi@0 283 }

mercurial