accessmethodslhs.java

来自「是一款用JAVA 编写的编译器 具有很强的编译功能」· Java 代码 · 共 707 行 · 第 1/2 页

JAVA
707
字号
/* * Copyright 1998 Sun Microsystems, Inc.  All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. *//* * @test * @bug 4102566 * @summary Test access methods for assignment targets. * @author William Maddox (maddox) * * @compile AccessMethodsLHS.java * @run main AccessMethodsLHS */public class AccessMethodsLHS {    static void fail(String msg) throws Exception {	throw new Exception("FAIL: " + msg);    }    static int arg = 123456;    private int i;    private double d;    private void m(int x) throws Exception {	System.out.println("called AccessMethodsLHS.m");	if (x != 123456)	    AccessMethodsLHS.fail("bad argument");    }    public static class Bar {        private int i;	private double d;	private String s;	private void m(int x) throws Exception {	    System.out.println("called AccessMethodsLHS.Bar.m");	    if (x != 123456)		AccessMethodsLHS.fail("bad argument");	}	// Static members are permitted in a static inner class.	static private int si;	static private double sd;	static private String ss;	static private void sm(int x) throws Exception {	    System.out.println("called AccessMethodsLHS.Bar.sm");	    if (x != 123456)		AccessMethodsLHS.fail("bad argument");	}    }    public static class Baz {        private int i;	private double d;	private String s;	private void m(int x) throws Exception {	    System.out.println("called Baz.m");	    if (x != 123456)		AccessMethodsLHS.fail("bad argument");	}	// Compiler rejects static members here correctly.		// static private int si;	// static private double sd;	// static private String ss;    }    public class Quux {	void DoIt () throws Exception {	    m(arg);	    i = 1;	    d = 1.0;	    i += 5;	    i--;	}	void DoMore(AccessMethodsLHS f) throws Exception {	    f.m(arg);	}    }    public static class Quem {	void DoIt () {	    // Illegal static refs to non-static vars	    // i = 1;	    // d = 1.0;	    // i += 5;	    // i--;	}    }    static int effects = 0;    static Bar iBar(Bar x) { effects++; return x; }    static Baz iBaz(Baz x) { effects++; return x; }    static void checkEffects(int i) throws Exception {	if (effects != 1) {	    AccessMethodsLHS.fail("incorrect side-effect behavior (" + effects + "): " + i);	}	effects = 0;    }     static public void main(String args[]) throws Exception {        Bar b = new Bar();	Baz c = new Baz();        System.out.println("testing assignment");	AccessMethodsLHS f = new AccessMethodsLHS();	Quux q1 = f.new Quux();	q1.DoIt();	q1.DoMore(f);	Quem q2 = new Quem();	q2.DoIt();	// *** Static class, Non-static members ***	b.m(arg);	// Integer (1 word)	b.i = 5;	System.out.println(b.i);	if (b.i != 5)	    AccessMethodsLHS.fail("simple assignment");	System.out.println(b.i);	if ((b.i += 10) != 15)	    AccessMethodsLHS.fail("add-assign result");	System.out.println(b.i);	if (b.i != 15)	    AccessMethodsLHS.fail("add-assign effect");	System.out.println(b.i);	b.s = "foo";	if (!(b.s += "bar").equals("foobar"))	    AccessMethodsLHS.fail("concat-assign result");	System.out.println(b.s);	if (!b.s.equals("foobar"))	    AccessMethodsLHS.fail("concat-assign effect");	System.out.println(b.s);	b.s = "foo";	b.s += "bar";	if (!b.s.equals("foobar"))	    AccessMethodsLHS.fail("concat-assign effect (novalue)");	System.out.println(b.s);	b.i = 0;	b.i++;	if (b.i != 1)	    AccessMethodsLHS.fail("post-increment effect");	System.out.println(b.i);	b.i = 5;	if (b.i++ != 5)	    AccessMethodsLHS.fail("post-increment result");	if (b.i != 6)	    AccessMethodsLHS.fail("post-increment effect (embedded)");	System.out.println(b.i);	b.i = 1;	--b.i;	if (b.i != 0)	    AccessMethodsLHS.fail("pre-decrement effect");	b.i = 5;	if (--b.i != 4)	    AccessMethodsLHS.fail("pre-decrement result");	if (b.i != 4)	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");	System.out.println(b.i);	// Double (2 word)	b.d = 5.0;	System.out.println(b.d);	if (b.d != 5.0)	    AccessMethodsLHS.fail("simple assignment");	System.out.println(b.d);	if ((b.d += 10) != 15.0)	    AccessMethodsLHS.fail("add-assign result");	System.out.println(b.d);	if (b.d != 15.0)	    AccessMethodsLHS.fail("add-assign effect");	System.out.println(b.d);	b.d = 0.0;	b.d++;	if (b.d != 1.0)	    AccessMethodsLHS.fail("post-increment effect");	System.out.println(b.d);	b.d = 5.0;	if (b.d++ != 5.0)	    AccessMethodsLHS.fail("post-increment result");	if (b.d != 6.0)	    AccessMethodsLHS.fail("post-increment effect (embedded)");	System.out.println(b.d);	b.d = 1.0;	--b.d;	if (b.d != 0.0)	    AccessMethodsLHS.fail("pre-decrement effect");	b.d = 5.0;	if (--b.d != 4.0)	    AccessMethodsLHS.fail("pre-decrement result");	if (b.d != 4.0)	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");	System.out.println(b.d);	// Integer (1 word) with side-effects in object reference	iBar(b).i = 5;	checkEffects(1);	System.out.println(b.i);	if (b.i != 5)	    AccessMethodsLHS.fail("simple assignment");	System.out.println(b.i);	if ((iBar(b).i += 10) != 15)	    AccessMethodsLHS.fail("add-assign result");	checkEffects(2);	System.out.println(b.i);	if (b.i != 15)	    AccessMethodsLHS.fail("add-assign effect");	System.out.println(b.i);	b.i = 0;	iBar(b).i++;	checkEffects(3);	if (b.i != 1)	    AccessMethodsLHS.fail("post-increment effect");	System.out.println(b.i);	b.i = 5;	if (iBar(b).i++ != 5)	    AccessMethodsLHS.fail("post-increment result");	checkEffects(4);	if (b.i != 6)	    AccessMethodsLHS.fail("post-increment effect (embedded)");	System.out.println(b.i);	b.i = 1;	--iBar(b).i;	checkEffects(5);	if (b.i != 0)	    AccessMethodsLHS.fail("pre-decrement effect");	b.i = 5;	if (--iBar(b).i != 4)	    AccessMethodsLHS.fail("pre-decrement result");	checkEffects(6);	if (b.i != 4)	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");	System.out.println(b.i);	// *** Static class, Static members ***	Bar.sm(arg);	// Integer (1 word)	Bar.si = 5;	System.out.println(Bar.si);	if (Bar.si != 5)	    AccessMethodsLHS.fail("simple assignment");	System.out.println(Bar.si);	if ((Bar.si += 10) != 15)	    AccessMethodsLHS.fail("add-assign result");	System.out.println(Bar.si);	if (Bar.si != 15)	    AccessMethodsLHS.fail("add-assign effect");	System.out.println(Bar.si);	Bar.ss = "foo";	if (!(Bar.ss += "bar").equals("foobar"))	    AccessMethodsLHS.fail("concat-assign result");	System.out.println(Bar.ss);	if (!Bar.ss.equals("foobar"))	    AccessMethodsLHS.fail("concat-assign effect");	System.out.println(Bar.ss);	Bar.ss = "foo";	Bar.ss += "bar";	if (!Bar.ss.equals("foobar"))	    AccessMethodsLHS.fail("concat-assign effect (novalue)");	System.out.println(Bar.ss);	Bar.si = 0;	Bar.si++;	if (Bar.si != 1)	    AccessMethodsLHS.fail("post-increment effect");	System.out.println(Bar.si);	Bar.si = 5;	if (Bar.si++ != 5)	    AccessMethodsLHS.fail("post-increment result");	if (Bar.si != 6)	    AccessMethodsLHS.fail("post-increment effect (embedded)");	System.out.println(Bar.si);	Bar.si = 1;	--Bar.si;	if (Bar.si != 0)	    AccessMethodsLHS.fail("pre-decrement effect");	Bar.si = 5;	if (--Bar.si != 4)	    AccessMethodsLHS.fail("pre-decrement result");	if (Bar.si != 4)	    AccessMethodsLHS.fail("pre-decrement effect (embedded)");	System.out.println(Bar.si);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?