/*******************************************************************************
 * Copyright (c) 2002, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.debug.tests.eval.generator;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class NestedTypeTestGenerator extends TestGenerator {

	static final int T_T = 0;
	static final int T_T_A= 1;
	static final int T_A= 2;
	static final int T_T_A_AA= 3;
	static final int T_A_AA= 4;
	static final int T_AA= 5;
	static final int T_T_A_AB= 44;
	static final int T_A_AB= 45;
	static final int T_AB= 46;
	static final int T_T_B= 39;
	static final int T_B= 40;
	static final int T_T_B_BB= 41;
	static final int T_B_BB= 42;
	static final int T_BB= 43;
	static final int T_C= -1;
	static final int T_E= -1;

	static final int T_T_this= 6;
	static final int T_T_A_this= 7;
	static final int T_A_this= 8;
	static final int T_B_this= 9;
	static final int T_C_this= 10;
	static final int T_E_this= 11;

	static final int I_A= 12;
	static final int I_AA= 13;
	static final int I_AB= 14;
	static final int I_AC= 15;
	static final int I_AD= 16;
	static final int I_AE= 17;
	static final int I_AF= 18;
	static final int I_B= 19;
	static final int I_BB= 20;
	static final int I_BC= 21;
	static final int I_BD= 22;
	static final int I_C= 23;
	static final int I_CB= 24;
	static final int I_CC= 25;
	static final int I_CD= 26;
	static final int I_D= 27;
	static final int I_DB= 28;
	static final int I_DC= 29;
	static final int I_DD= 30;
	static final int I_E= 31;
	static final int I_EB= 32;
	static final int I_EC= 33;
	static final int I_ED= 34;
	static final int I_F= 35;
	static final int I_FB= 36;
	static final int I_FC= 37;
	static final int I_FD= 38;

	static final String[] qualifiers= 
		{"T_T",     "T_T_A",    "T_A",    "T_T_A_AA", "T_A_AA",   "T_AA",   "T_T_this", "T_T_Athis", "T_A_this", "T_B_this",
		"T_C_this", "T_E_this", "I_A",    "I_AA",     "I_AB",     "I_AC",   "I_AD",     "I_AE",      "I_AF",     "I_B",
		"I_BB",     "I_BC",     "I_BD",   "I_C",      "I_CB",     "I_CC",   "I_CD",     "I_D",       "I_DB",     "I_DC",
		"I_DD",     "I_E",      "I_EB",   "I_EC",     "I_ED",     "I_F",    "I_FB",     "I_FC",      "I_FD",     "T_T_B",
		"T_B",      "T_T_B_BB", "T_B_BB", "T_BB",     "T_T_A_AB", "T_A_AB", "T_AB"};
	
	static final int [] qualifiersLevel=
		{0, 1, 1, 2, 2, 2, 0, 1, 1, 1,
		 1, 1, 1, 2, 2, 2, 2, 2, 2, 1,
		 2, 2, 2, 1, 2, 2, 2, 1, 2, 2,
		 2, 1, 2, 2, 2, 1, 2, 2, 2, 1,
		 1, 2, 2, 2, 2, 2, 2};

	public static void main(String[] args) throws Exception {
		gen_AA_aa();
		gen_AA_aaStatic();
		gen_AB_ab();
		gen_AC_ac();
		gen_AD_ad();
		gen_A_a();
		gen_AE_ae();
		gen_AF_af();
		gen_A_aStatic();
		gen_BB_bb();
		gen_BC_bc();
		gen_BD_bd();
		gen_B_b();
		gen_CB_cb();
		gen_CC_cc();
		gen_CD_cd();
		gen_C_c();
		gen_DB_db();
		gen_DC_dc();
		gen_DD_dd();
		gen_D_d();
		gen_EB_eb();
		gen_EC_ec();
		gen_ED_ed();
		gen_E_e();
		gen_FB_fb();
		gen_FC_fc();
		gen_FD_fd();
		gen_F_f();
		gen_evalNestedTypeTest();
		gen_evalNestedTypeTestStatic();
		System.out.println("done");
	}
	
	public static void gen_AA_aa() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTest('c', 2, code);
		createTest('d', 2, code);
		createTest('e', 2, code);
		createTest('f', 2, code);
		createTest('h', 2, code);
		createTest('i', 2, code);
		createTest('j', 2, code);
		createTestThis('c', 2, code);
		createTestThis('d', 2, code);
		createTestThis('e', 2, code);
		createTestThis('f', 2, code);
		createTestThis('i', 2, code);
		createTestThis('j', 2, code);
		createTestsStaticFields_A(code);
		
		createJavaFile(code, 65, 4);
	}
	
	public static void gen_AA_aaStatic() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTest('d', 2, code);
		createTest('f', 2, code);
		createTest('h', 2, code);
		createTest('j', 2, code);
		createTestsStaticFields_A(code);

		createJavaFile(code, 69, 4);
	}
	
	public static void gen_AB_ab() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTest('c', 2, code);
		createTest('d', 2, code);
		createTest('e', 2, code);
		createTest('f', 2, code);
		createTest('g', 2, code);
		createTest('h', 2, code);
		createTest('i', 2, code);
		createTest('j', 2, code);
		createTestThis('c', 2, code);
		createTestThis('d', 2, code);
		createTestThis('e', 2, code);
		createTestThis('f', 2, code);
		createTestThis('i', 2, code);
		createTestThis('j', 2, code);
		createTestsStaticFields_A(code);
		createTestQualifier(T_A_this, 'c', code);
		createTestQualifier(T_A_this, 'd', code);
		createTestQualifier(T_A_this, 'g', code);
		createTestQualifier(T_A_this, 'h', code);
		
		createJavaFile(code, 94, 4);
	}

	public static void gen_AC_ac() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTest('g', 2, code);
		createTest('h', 2, code);
		createTestsStaticFields_A(code);
		createTestQualifier(T_A_this, 'c', code);
		createTestQualifier(T_A_this, 'd', code);
		createTestQualifier(T_A_this, 'g', code);
		createTestQualifier(T_A_this, 'h', code);
		
		createJavaFile(code, 120, 4);
	}
	
	public static void gen_AD_ad() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTest('g', 2, code);
		createTest('h', 2, code);
		createTestsStaticFields_A(code);
		createTestQualifier(T_A_this, 'c', code);
		createTestQualifier(T_A_this, 'd', code);
		createTestQualifier(T_A_this, 'g', code);
		createTestQualifier(T_A_this, 'h', code);
		
		createJavaFile(code, 145, 4);
	}
	
	public static void gen_A_a() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 1, code);
		createTest('c', 1, code);
		createTest('d', 1, code);
		createTest('f', 1, code);
		createTest('g', 1, code);
		createTest('h', 1, code);
		createTestThis('c', 1, code);
		createTestThis('d', 1, code);
		createTestThis('g', 1, code);
		createTestThis('h', 1, code);
		createTestsStaticFields_A(code);
		createTestQualifier(I_AB, 'c', code);
		createTestQualifier(I_AB, 'd', code);
		createTestQualifier(I_AB, 'e', code);
		createTestQualifier(I_AB, 'f', code);
		createTestQualifier(I_AB, 'i', code);
		createTestQualifier(I_AB, 'j', code);
		
		createJavaFile(code, 155, 3);
	}
	
	public static void gen_AE_ae() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTest('h', 2, code);
		createTestsStaticFields_A(code);
		
		createJavaFile(code, 179, 4);
	}
	
	public static void gen_AF_af() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTest('h', 2, code);
		createTestsStaticFields_A(code);
		
		createJavaFile(code, 203, 4);
	}
	
	public static void gen_A_aStatic() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 1, code);
		createTest('d', 1, code);
		createTest('f', 1, code);
		createTest('h', 1, code);
		createTestsStaticFields_A(code);
		createTestQualifier(I_AA, 'c', code);
		createTestQualifier(I_AA, 'd', code);
		createTestQualifier(I_AA, 'e', code);
		createTestQualifier(I_AA, 'f', code);
		createTestQualifier(I_AA, 'i', code);
		createTestQualifier(I_AA, 'j', code);
		
		createJavaFile(code, 214, 3);
	}
	
	public static void gen_BB_bb() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTest('c', 2, code);
		createTest('d', 2, code);
		createTest('e', 2, code);
		createTest('f', 2, code);
		createTest('g', 2, code);
		createTest('h', 2, code);
		createTest('i', 2, code);
		createTest('j', 2, code);
		createTestThis('c', 2, code);
		createTestThis('d', 2, code);
		createTestThis('e', 2, code);
		createTestThis('f', 2, code);
		createTestThis('i', 2, code);
		createTestThis('j', 2, code);
		createTestsStaticFields_B(code);
		createTestQualifier(T_B_this, 'c', code);
		createTestQualifier(T_B_this, 'd', code);
		createTestQualifier(T_B_this, 'g', code);
		createTestQualifier(T_B_this, 'h', code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 252, 4);
	}

	public static void gen_BC_bc() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTest('g', 2, code);
		createTest('h', 2, code);
		createTestsStaticFields_B(code);
		createTestQualifier(T_B_this, 'c', code);
		createTestQualifier(T_B_this, 'd', code);
		createTestQualifier(T_B_this, 'g', code);
		createTestQualifier(T_B_this, 'h', code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 279, 4);
	}

	public static void gen_BD_bd() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTest('g', 2, code);
		createTest('h', 2, code);
		createTestsStaticFields_B(code);
		createTestQualifier(T_B_this, 'c', code);
		createTestQualifier(T_B_this, 'd', code);
		createTestQualifier(T_B_this, 'g', code);
		createTestQualifier(T_B_this, 'h', code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 304, 4);
	}

	public static void gen_B_b() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 1, code);
		createTest('b', 1, code);
		createTest('c', 1, code);
		createTest('d', 1, code);
		createTest('e', 1, code);
		createTest('f', 1, code);
		createTest('g', 1, code);
		createTest('h', 1, code);
		createTestThis('c', 1, code);
		createTestThis('d', 1, code);
		createTestThis('g', 1, code);
		createTestThis('h', 1, code);
		createTestsStaticFields_B(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		createTestQualifier(I_BB, 'c', code);
		createTestQualifier(I_BB, 'd', code);
		createTestQualifier(I_BB, 'e', code);
		createTestQualifier(I_BB, 'f', code);
		createTestQualifier(I_BB, 'i', code);
		createTestQualifier(I_BB, 'j', code);
		
		createJavaFile(code, 315, 3);
	}

	public static void gen_CB_cb() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 354, 4);
	}

	public static void gen_CC_cc() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 381, 4);
	}

	public static void gen_CD_cd() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 406, 4);
	}

	public static void gen_C_c() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 1, code);
		createTest('b', 1, code);
		createTest('e', 1, code);
		createTest('f', 1, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 417, 3);
	}

	public static void gen_DB_db() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 455, 4);
	}

	public static void gen_DC_dc() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 481, 4);
	}

	public static void gen_DD_dd() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 2, code);
		createTest('b', 2, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 506, 4);
	}

	public static void gen_D_d() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('a', 1, code);
		createTest('b', 1, code);
		createTest('e', 1, code);
		createTest('f', 1, code);
		createTestsStaticFields(code);
		createTestQualifier(T_T_this, 'a', code);
		createTestQualifier(T_T_this, 'b', code);
		createTestQualifier(T_T_this, 'c', code);
		createTestQualifier(T_T_this, 'd', code);
		createTestQualifier(T_T_this, 'e', code);
		createTestQualifier(T_T_this, 'f', code);
		
		createJavaFile(code, 517, 3);
	}
	
	public static void gen_evalNestedTypeTest() throws Exception {
		StringBuffer code= new StringBuffer();
		
		
		createTest('a', 0, code);
		createTest('b', 0, code);
		createTest('c', 0, code);
		createTest('d', 0, code);
		createTest('e', 0, code);
		createTest('f', 0, code);
		createTestThis('a', 0, code);
		createTestThis('b', 0, code);
		createTestThis('c', 0, code);
		createTestThis('d', 0, code);
		createTestThis('e', 0, code);
		createTestThis('f', 0, code);
		createTestsStaticFields(code);
		createTestQualifier(I_B, 'c', code);
		createTestQualifier(I_B, 'd', code);
		createTestQualifier(I_B, 'g', code);
		createTestQualifier(I_B, 'h', code);
		createTestQualifier(I_BB, 'c', code);
		createTestQualifier(I_BB, 'd', code);
		createTestQualifier(I_BB, 'e', code);
		createTestQualifier(I_BB, 'f', code);
		createTestQualifier(I_BB, 'i', code);
		createTestQualifier(I_BB, 'j', code);
		
		createJavaFile(code, 529, 2);
	}

	public static void gen_EB_eb() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 566, 4);
	}

	public static void gen_EC_ec() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 592, 4);
	}

	public static void gen_ED_ed() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 616, 4);
	}

	public static void gen_E_e() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 1, code);
		createTest('f', 1, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 626, 3);
	}
	
	public static void gen_FB_fb() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 664, 4);
	}

	public static void gen_FC_fc() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 690, 4);
	}

	public static void gen_FD_fd() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 2, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 714, 4);
	}

	public static void gen_F_f() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 1, code);
		createTest('f', 1, code);
		createTestsStaticFields(code);
		
		createJavaFile(code, 724, 3);
	}
	
	public static void gen_evalNestedTypeTestStatic() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTest('b', 0, code);
		createTest('d', 0, code);
		createTest('f', 0, code);
		createTestsStaticFields(code);
		createTestQualifier(I_A, 'c', code);
		createTestQualifier(I_A, 'd', code);
		createTestQualifier(I_A, 'g', code);
		createTestQualifier(I_A, 'h', code);
		createTestQualifier(I_AA, 'c', code);
		createTestQualifier(I_AA, 'd', code);
		createTestQualifier(I_AA, 'e', code);
		createTestQualifier(I_AA, 'f', code);
		createTestQualifier(I_AA, 'i', code);
		createTestQualifier(I_AA, 'j', code);
		createTestQualifier(I_AB, 'c', code);
		createTestQualifier(I_AB, 'd', code);
		createTestQualifier(I_AB, 'e', code);
		createTestQualifier(I_AB, 'f', code);
		createTestQualifier(I_AB, 'i', code);
		createTestQualifier(I_AB, 'j', code);
		
		createJavaFile(code, 739, 2);
	}
	
	public static void gen_main() throws Exception {
		StringBuffer code= new StringBuffer();
		
		createTestsStaticFields(code);

		createJavaFile(code, 745, 1);
	}

	// ------------------------------
	
	public static void createTestsStaticFields(StringBuffer code) {
		createTestQualifier(T_T, 'b', code);
		createTestQualifier(T_T, 'd', code);
		createTestQualifier(T_T, 'f', code);
		createTestQualifier(T_T_A, 'd', code);
		createTestQualifier(T_T_A, 'h', code);
		createTestQualifier(T_A, 'd', code);
		createTestQualifier(T_A, 'h', code);
		createTestQualifier(T_T_A_AA, 'd', code);
		createTestQualifier(T_T_A_AA, 'f', code);
		createTestQualifier(T_T_A_AA, 'j', code);
		createTestQualifier(T_T_A_AB, 'd', code);
		createTestQualifier(T_T_A_AB, 'f', code);
		createTestQualifier(T_T_A_AB, 'j', code);
		createTestQualifier(T_A_AA, 'd', code);
		createTestQualifier(T_A_AA, 'f', code);
		createTestQualifier(T_A_AA, 'j', code);
		createTestQualifier(T_A_AB, 'd', code);
		createTestQualifier(T_A_AB, 'f', code);
		createTestQualifier(T_A_AB, 'j', code);
		createTestQualifier(T_T_B, 'd', code);
		createTestQualifier(T_T_B, 'h', code);
		createTestQualifier(T_B, 'd', code);
		createTestQualifier(T_B, 'h', code);
		createTestQualifier(T_T_B_BB, 'd', code);
		createTestQualifier(T_T_B_BB, 'f', code);
		createTestQualifier(T_T_B_BB, 'j', code);
		createTestQualifier(T_B_BB, 'd', code);
		createTestQualifier(T_B_BB, 'f', code);
		createTestQualifier(T_B_BB, 'j', code);
	}
	
	public static void createTestsStaticFields_A(StringBuffer code) {
		createTestsStaticFields(code);
		createTestQualifier(T_AA, 'd', code);
		createTestQualifier(T_AA, 'f', code);
		createTestQualifier(T_AA, 'j', code);
		createTestQualifier(T_AB, 'd', code);
		createTestQualifier(T_AB, 'f', code);
		createTestQualifier(T_AB, 'j', code);
	}
	
	public static void createTestsStaticFields_B(StringBuffer code) {
		createTestsStaticFields(code);
		createTestQualifier(T_BB, 'd', code);
		createTestQualifier(T_BB, 'f', code);
		createTestQualifier(T_BB, 'j', code);
	}
	
	// ------------------------------
	
	public static void createTest(char variable, int level, StringBuffer code) {
		code.append("\tpublic void testEvalNestedTypeTest_" + variable + "() throws Throwable {\n");
		tryBlockBegin(code);
		
		genCodeEval("" + variable + "Int", true, code);
		genCodeReturnTypeCheck("" + variable, "int", true, code);
		genCodeReturnValueCheckPrimitiveType("" + variable, "int", "Int", variable + "IntValue_" + level, true, code);
		code.append("\n");
		
		genCodeEval("" + variable + "String", false, code);
		genCodeReturnTypeCheck("" + variable, "java.lang.String", false, code);
		genCodeReturnValueCheckStringType("" + variable, variable + "StringValue_" + level, true, code);
		
		tryBlockEnd(code);
		code.append("\t}\n\n");
	}
	
	public static void createTestThis(char variable, int level, StringBuffer code) {
		code.append("\tpublic void testEvalNestedTypeTest_this_" + variable + "() throws Throwable {\n");
		tryBlockBegin(code);
		
		genCodeEval("THIS + " + variable + "Int", true, code);
		genCodeReturnTypeCheck("" + variable, "int", true, code);
		genCodeReturnValueCheckPrimitiveType("" + variable, "int", "Int", variable + "IntValue_" + level, true, code);
		code.append("\n");
		
		genCodeEval("THIS + " + variable + "String", false, code);
		genCodeReturnTypeCheck("" + variable, "java.lang.String", false, code);
		genCodeReturnValueCheckStringType("" + variable, variable + "StringValue_" + level, true, code);
		
		tryBlockEnd(code);
		code.append("\t}\n\n");
	}
	
	
	
	public static void createTestQualifier(int qualifier, char variable, StringBuffer code) {
		String strQualifier= qualifiers[qualifier];
		code.append("\tpublic void testEvalNestedTypeTest_" + strQualifier + "_" + variable + "() throws Throwable {\n");
		tryBlockBegin(code);
		
		genCodeEval(strQualifier + " + " + variable + "Int", true, code);
		genCodeReturnTypeCheck("" + strQualifier + "_" + variable, "int", true, code);
		genCodeReturnValueCheckPrimitiveType("" + strQualifier + "_" + variable, "int", "Int", variable + "IntValue_" + qualifiersLevel[qualifier], true, code);
		code.append("\n");
		
		genCodeEval(strQualifier + " + " + variable + "String", false, code);
		genCodeReturnTypeCheck("" + strQualifier + "_" + variable, "java.lang.String", false, code);
		genCodeReturnValueCheckStringType("" + strQualifier + "_" + variable, variable + "StringValue_" + qualifiersLevel[qualifier], true, code);
		
		tryBlockEnd(code);
		code.append("\t}\n\n");
	}
	
	//---------------------
	
	public static void createJavaFile(StringBuffer tests, int lineNumber, int numberFrames) throws Exception {
		
		StringBuffer code= new StringBuffer();
		
		code.append("/*******************************************************************************\n");
		code.append(" * Copyright (c) 2002, 2003 IBM Corporation and others.\n");
		code.append(" * All rights reserved. This program and the accompanying materials \n");
		code.append(" * are made available under the terms of the Eclipse Public License v1.0\n");
		code.append(" * which accompanies this distribution, and is available at\n");
		code.append(" * http://www.eclipse.org/legal/epl-v10.html\n");
		code.append(" * \n");
		code.append(" * Contributors:\n");
		code.append(" *     IBM Corporation - initial API and implementation\n");
		code.append(" *******************************************************************************/\n");
		code.append("package org.eclipse.jdt.debug.tests.eval;\n\n");
		code.append("import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;\n\n");
		code.append("import org.eclipse.debug.core.model.IValue;\n");
		code.append("import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;\n\n");
		code.append("public class NestedTypeFieldValue_" + lineNumber + " extends Tests {\n");
		code.append("\t/**\n");
		code.append("\t * Constructor for NestedTypeFieldValue.\n");
		code.append("\t * @param name\n");
		code.append("\t */\n");
		code.append("\tpublic NestedTypeFieldValue_" + lineNumber + "(String name) {\n");
		code.append("\t\tsuper(name);\n");
		code.append("\t}\n\n");
		code.append("\tpublic void init() throws Exception {\n");
		code.append("\t\tinitializeFrame(\"EvalNestedTypeTests\", " + lineNumber + ", " + numberFrames + ");\n");
		code.append("\t}\n\n");
		code.append("\tprotected void end() throws Exception {\n");
		code.append("\t\tdestroyFrame();\n");
		code.append("\t}\n\n");
		
		code.append(tests.toString());
		
		code.append("}\n");
		
		Writer file = new FileWriter(new File("NestedTypeFieldValue_" + lineNumber + ".java").getAbsoluteFile());
		
		file.write(code.toString());
		
		file.close();
		
	}
}
