1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class InstField { 185387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public boolean mBoolean1, mBoolean2; 195387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public byte mByte1, mByte2; 205387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public char mChar1, mChar2; 215387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public short mShort1, mShort2; 225387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public int mInt1, mInt2; 235387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public float mFloat1, mFloat2; 245387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public long mLong1, mLong2; 255387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public double mDouble1, mDouble2; 265387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden public volatile long mVolatileLong1, mVolatileLong2; 275387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run() { 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assignFields(); 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project checkFields(); 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InstField.nullCheck(null); 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Check access to instance fields through a null pointer. 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static public void nullCheck(InstField nully) { 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("InstField.nullCheck"); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int x = nully.mInt1; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(false); 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException npe) { 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // good 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long l = nully.mLong1; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(false); 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException npe) { 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // good 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nully.mInt1 = 5; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(false); 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException npe) { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // good 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nully.mLong1 = 17L; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(false); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException npe) { 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // good 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void assignFields() { 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("InstField assign..."); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mBoolean1 = true; 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mBoolean2 = false; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mByte1 = 127; 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mByte2 = -128; 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mChar1 = 32767; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mChar2 = 65535; 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mShort1 = 32767; 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mShort2 = -32768; 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mInt1 = 65537; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mInt2 = -65537; 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mFloat1 = 3.1415f; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mFloat2 = -1.0f / 0.0f; // -inf 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mLong1 = 1234605616436508552L; // 0x1122334455667788 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mLong2 = -1234605616436508552L; 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mDouble1 = 3.1415926535; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mDouble2 = 1.0 / 0.0; // +inf 835387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden mVolatileLong1 = mLong1 - 1; 845387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden mVolatileLong2 = mLong2 + 1; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void checkFields() { 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("InstField check..."); 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mBoolean1); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(!mBoolean2); 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mByte1 == 127); 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mByte2 == -128); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mChar1 == 32767); 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mChar2 == 65535); 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mShort1 == 32767); 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mShort2 == -32768); 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mInt1 == 65537); 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mInt2 == -65537); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mFloat1 > 3.141f && mFloat1 < 3.142f); 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mFloat2 < mFloat1); 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mLong1 == 1234605616436508552L); 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mLong2 == -1234605616436508552L); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mDouble1 > 3.141592653 && mDouble1 < 3.141592654); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assert(mDouble2 > mDouble1); 1055387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden assert(mVolatileLong1 == 1234605616436508551L); 1065387824f19033ed51a945fbc8c2b574998404b3dAndy McFadden assert(mVolatileLong2 == -1234605616436508551L); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 109