/*******************************************************************************
 * Copyright (c) 2000, 2014 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.core.tests.compiler.parser;

import java.util.Locale;
import java.util.Map;

import junit.framework.Test;

import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.compiler.CategorizedProblem;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.core.tests.util.AbstractCompilerTest;
import org.eclipse.jdt.internal.compiler.ISourceElementRequestor;
import org.eclipse.jdt.internal.compiler.SourceElementParser;
import org.eclipse.jdt.internal.compiler.ast.Expression;
import org.eclipse.jdt.internal.compiler.ast.ImportReference;
import org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;

@SuppressWarnings({ "unchecked", "rawtypes" })
public class SourceElementParserTest extends AbstractCompilerTest implements ISourceElementRequestor {
	private SourceType currentType;
	private SourceMethod currentMethod;
	private SourceField currentField;
	private SourceInitializer currentInitializer;
	private char[] source;
	private SourcePackage currentPackage;
	private SourceImport[] currentImports;
	private int numberOfImports;
public SourceElementParserTest(String testName) {
	super(testName);
}
public SourceElementParserTest(String testName, char[] source) {
	super(testName);
	this.source = source;
}
static {
//	TESTS_NUMBERS = new int[] { 81 };
}
public static Test suite() {
	return buildAllCompliancesTestSuite(SourceElementParserTest.class);
}
/**
 * acceptAnnotationTypeReference method comment.
 */
public void acceptAnnotationTypeReference(char[][] typeName, int sourceStart, int sourceEnd) {}
/**
 * acceptAnnotationTypeReference method comment.
 */
public void acceptAnnotationTypeReference(char[] typeName, int sourcePosition) {}
/**
 * acceptConstructorReference method comment.
 */
public void acceptConstructorReference(char[] typeName, int argCount, int sourcePosition) {
	if (this.currentMethod == null) {
		if (this.currentType != null) {
			StringBuffer buffer = new StringBuffer();
			buffer.append(typeName).append("(").append(argCount).append(")\n");
			this.currentType.setDefaultConstructor(buffer.toString());
		}
		return;
	}
	if (this.currentMethod.isConstructor()) {
		StringBuffer buffer = new StringBuffer();
		buffer.append(typeName).append("(").append(argCount).append(")\n");
		this.currentMethod.setExplicitConstructorCall(buffer.toString());
	} else {
		if (this.currentType != null) {
			StringBuffer buffer = new StringBuffer();
			buffer.append(typeName).append("(").append(argCount).append(")\n");
			this.currentType.setDefaultConstructor(buffer.toString());
		}
	}
}
/**
 * acceptFieldReference method comment.
 */
public void acceptFieldReference(char[] fieldName, int sourcePosition) {}
/**
 * acceptImport method comment.
 */
public void acceptImport(
	int declarationStart,
	int declarationEnd,
	int nameStart,
	int nameEnd,
	char[][] tokens,
	boolean onDemand,
	int modifiers) {

	addImport(
		new SourceImport(declarationStart, declarationEnd, CharOperation.concatWith(tokens, '.'), onDemand, modifiers, this.source));
}
/**
 * acceptLineSeparatorPositions method comment.
 */
public void acceptLineSeparatorPositions(int[] positions) {}
/**
 * acceptMethodReference method comment.
 */
public void acceptMethodReference(char[] methodName, int argCount, int sourcePosition) {}
/**
 * acceptPackage method comment.
 */
public void acceptPackage(ImportReference importReference) {

	this.currentPackage =
		new SourcePackage(importReference.declarationSourceStart, importReference.declarationSourceEnd, CharOperation.concatWith(importReference.getImportName(), '.'), this.source);
}
/**
 * acceptProblem method comment.
 */
public void acceptProblem(CategorizedProblem problem) {}
/**
 * acceptTypeReference method comment.
 */
public void acceptTypeReference(char[][] typeName, int sourceStart, int sourceEnd) {}
/**
 * acceptTypeReference method comment.
 */
public void acceptTypeReference(char[] typeName, int sourcePosition) {}
/**
 * acceptUnknownReference method comment.
 */
public void acceptUnknownReference(char[][] name, int sourceStart, int sourceEnd) {}
/**
 * acceptUnknownReference method comment.
 */
public void acceptUnknownReference(char[] name, int sourcePosition) {}
protected void addImport(SourceImport sourceImport) {
	if (this.currentImports == null) {
		this.currentImports = new SourceImport[4];
	}

	if (this.numberOfImports == this.currentImports.length) {
		System.arraycopy(
			this.currentImports,
			0,
			this.currentImports = new SourceImport[this.numberOfImports * 2],
			0,
			this.numberOfImports);
	}
	this.currentImports[this.numberOfImports++] = sourceImport;
}
public void dietParse(String s, String testName) {
	this.dietParse(s, testName, false);
}
public void dietParse(String s, String testName, boolean recordLocalDeclaration) {

	this.source = s.toCharArray();
	reset();
	SourceElementParser parser =
		new SourceElementParser(
			this,
			new DefaultProblemFactory(Locale.getDefault()),
			new CompilerOptions(getCompilerOptions()),
			recordLocalDeclaration/*don't record local declarations*/,
			true/*optimize string literals*/);

	ICompilationUnit sourceUnit = new CompilationUnit(this.source, testName, null);

	parser.parseCompilationUnit(sourceUnit, false, null);

}
public static String displayModifiers(int modifiers) {
	StringBuffer buffer = new StringBuffer();

	if ((modifiers & ClassFileConstants.AccPublic) != 0)
		buffer.append("public ");
	if ((modifiers & ClassFileConstants.AccProtected) != 0)
		buffer.append("protected ");
	if ((modifiers & ClassFileConstants.AccPrivate) != 0)
		buffer.append("private ");
	if ((modifiers & ClassFileConstants.AccFinal) != 0)
		buffer.append("final ");
	if ((modifiers & ClassFileConstants.AccStatic) != 0)
		buffer.append("static ");
	if ((modifiers & ClassFileConstants.AccAbstract) != 0)
		buffer.append("abstract ");
	if ((modifiers & ClassFileConstants.AccNative) != 0)
		buffer.append("native ");
	if ((modifiers & ClassFileConstants.AccSynchronized) != 0)
		buffer.append("synchronized ");
	return buffer.toString();
}
public void enterType(TypeInfo typeInfo) {
	if (this.currentType == null) {
		// top level type
		this.currentType =
			new SourceType(
				null,
				typeInfo.declarationStart,
				typeInfo.modifiers,
				typeInfo.name,
				typeInfo.nameSourceStart,
				typeInfo.nameSourceEnd,
				typeInfo.superclass,
				typeInfo.superinterfaces,
				this.source);
		this.currentType.setPackage(this.currentPackage);
		setImports();
	} else {
		// member type
		SourceType memberType;
		this.currentType.addMemberType(
			memberType =
				new SourceType(
					this.currentType.getName(),
					typeInfo.declarationStart,
					typeInfo.modifiers,
					typeInfo.name,
					typeInfo.nameSourceStart,
					typeInfo.nameSourceEnd,
					typeInfo.superclass,
					typeInfo.superinterfaces,
					this.source));
		memberType.parent = this.currentType;
		this.currentType = memberType;
	}
	if (typeInfo.typeParameters != null) {
		for (int i = 0, length = typeInfo.typeParameters.length; i < length; i++) {
			TypeParameterInfo typeParameterInfo = typeInfo.typeParameters[i];
			addTypeParameterToType(typeParameterInfo);
		}
	}
}
public void enterCompilationUnit() {
}
public void enterConstructor(MethodInfo methodInfo) {
	enterAbtractMethod(methodInfo);
}
public void enterField(FieldInfo fieldInfo) {
	this.currentType.addField(
		this.currentField =
			new SourceField(
				fieldInfo.declarationStart,
				fieldInfo.modifiers,
				fieldInfo.type,
				fieldInfo.name,
				fieldInfo.nameSourceStart,
				fieldInfo.nameSourceEnd,
				this.source));

}
public void enterInitializer(int declarationSourceStart, int modifiers) {
	this.currentType.addField(
		this.currentInitializer = new SourceInitializer(
			declarationSourceStart,
			modifiers));
}
public void exitInitializer(int declarationSourceEnd) {
	this.currentInitializer.setDeclarationSourceEnd(declarationSourceEnd);
}
public void enterMethod(MethodInfo methodInfo) {
	enterAbtractMethod(methodInfo);
}
protected void enterAbtractMethod(MethodInfo methodInfo) {
	this.currentType.addMethod(
		this.currentMethod =
			new SourceMethod(
				methodInfo.declarationStart,
				methodInfo.modifiers,
				methodInfo.returnType,
				methodInfo.name, // null for constructors
				methodInfo.nameSourceStart,
				methodInfo.nameSourceEnd,
				methodInfo.parameterTypes,
				methodInfo.parameterNames,
				methodInfo.exceptionTypes,
				this.source));

	if (methodInfo.typeParameters != null) {
		for (int i = 0, length = methodInfo.typeParameters.length; i < length; i++) {
			TypeParameterInfo typeParameterInfo = methodInfo.typeParameters[i];
			addTypeParameterToMethod(typeParameterInfo);
		}
	}
}
public void addTypeParameterToMethod(TypeParameterInfo typeParameterInfo) {
	if (this.currentMethod.typeParameterNames == null) {
		this.currentMethod.typeParameterNames = new char[][] {typeParameterInfo.name};
		this.currentMethod.typeParameterBounds = new char[][][] {typeParameterInfo.bounds};
	} else {
		int length = this.currentMethod.typeParameterNames.length;
		System.arraycopy(this.currentMethod.typeParameterNames, 0, this.currentMethod.typeParameterNames = new char[length+1][],0, length);
		this.currentMethod.typeParameterNames[length] = typeParameterInfo.name;
		System.arraycopy(this.currentMethod.typeParameterBounds, 0, this.currentMethod.typeParameterBounds = new char[length+1][][],0, length);
		this.currentMethod.typeParameterBounds[length] = typeParameterInfo.bounds;
	}
}
public void addTypeParameterToType(TypeParameterInfo typeParameterInfo) {
	if (this.currentType.typeParameterNames == null) {
		this.currentType.typeParameterNames = new char[][] {typeParameterInfo.name};
		this.currentType.typeParameterBounds = new char[][][] {typeParameterInfo.bounds};
	} else {
		int length = this.currentType.typeParameterNames.length;
		System.arraycopy(this.currentType.typeParameterNames, 0, this.currentType.typeParameterNames = new char[length+1][],0, length);
		this.currentMethod.typeParameterNames[length] = typeParameterInfo.name;
		System.arraycopy(this.currentType.typeParameterBounds, 0, this.currentType.typeParameterBounds = new char[length+1][][],0, length);
		this.currentType.typeParameterBounds[length] = typeParameterInfo.bounds;
	}
}
public void exitType(int declarationEnd) {
	this.currentType.setDeclarationSourceEnd(declarationEnd);
	if (this.currentType.parent != null) {
		this.currentType = this.currentType.parent;
	}
}
public void exitCompilationUnit(int declarationEnd) {}
public void exitConstructor(int declarationEnd) {
	exitAbstractMethod(declarationEnd);
}
public void exitField(int initializationStart, int declarationEnd, int declarationSourceEnd) {
	this.currentField.setDeclarationSourceEnd(declarationEnd);
}
public void exitMethod(int declarationEnd, Expression defaultValue) {
	exitAbstractMethod(declarationEnd);
}
protected void exitAbstractMethod(int declarationEnd) {
	this.currentMethod.setDeclarationSourceEnd(declarationEnd);
}
public void fullParse(String s, String testName) {
	this.fullParse(s, testName, false);
}
public void fullParse(String s, String testName, Map options) {
	this.fullParse(s, testName, false, options);
}
public void fullParse(String s, String testName, boolean recordLocalDeclaration, Map options) {
	this.source = s.toCharArray();
	reset();
	SourceElementParser parser =
		new SourceElementParser(
			this, new DefaultProblemFactory(Locale.getDefault()),
			new CompilerOptions(options),
			recordLocalDeclaration/*don't record local declarations*/,
			true/*optimize string literals*/);

	ICompilationUnit sourceUnit = new CompilationUnit(this.source, testName, null);

	parser.parseCompilationUnit(sourceUnit, true, null);
}
public void fullParse(String s, String testName, boolean recordLocalDeclaration) {
	this.fullParse(s, testName, recordLocalDeclaration, getCompilerOptions());
}
public void reset() {
	this.currentType = null;
	this.currentMethod = null;
	this.currentField = null;
	this.currentPackage = null;
	this.currentImports = null;
	this.numberOfImports = 0;
}
public void setImports() {
	if (this.currentImports == null)
		return;
	if (this.numberOfImports != this.currentImports.length) {
		System.arraycopy(
			this.currentImports,
			0,
			this.currentImports = new SourceImport[this.numberOfImports],
			0,
			this.numberOfImports);
	}
	this.currentType.setImports(this.currentImports);
}
public void test01() {

	String s =
		"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "\n"
			+ "public class X {\n"
			+ "void foo() {\n"
			+ "System.out.println();\n"
			+ "\n"
			+ "public int h;\n"
			+ "public int[] i = { 0, 1 };\n"
			+ "\n"
			+ "int bar" + "\\" + "u0065(){\n"
			+ "void truc(){\n"
			+ "}\n";

	String expectedUnitToString =
		"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "public class X {\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tint bare() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test01: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		52,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		178,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 105, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 117, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 119, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 144, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 69, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 103, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bare", 147, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bare", 163, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 164, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 177, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bare", "bar" + "\\" + "u0065", methods[1].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test02() {

	String s =
			"/** javadoc comment */\n"
			+ "public class X {\n"
			+ "}\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tjava.lang.Object(0)\n"
			+ "}";

	String testName = "test02: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		40,
		this.currentType.getDeclarationSourceEnd());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test03() {

	String s =
		"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "\n"
			+ "public class X {\n"
			+ "void foo() {\n"
			+ "System.out.println();\n"
			+ "\n"
			+ "public int h;\n"
			+ "public int[] i = { 0, 1 };\n"
			+ "\n"
			+ "int bar" + "\\" + "u0065(){\n"
			+ "void truc(){\n"
			+ "}\n";

	String expectedUnitToString =
		"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "public class X {\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tvoid foo() {}\n"
			+ "\tint bare() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test03: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		52,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		178,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 105, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 117, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 119, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 144, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 69, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 103, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 147, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 163, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 164, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 177, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bare", "bar" + "\\" + "u0065", methods[1].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test04() {

	String s =
		"package a;											\n"
			+ "import java.lang.*;							\n"
			+ "import java.util.*;							\n"
			+ "												\n"
			+ "public class X {								\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ "												\n"
			+ "		class L {								\n"
			+ "			void baz(){}						\n"
			+ "		}										\n"
			+ "												\n"
			+ "	public int h;								\n"
			+ "	public int[] i = { 0, 1 };					\n"
			+ "												\n"
			+ "	void bar(){									\n"
			+ "	void truc(){								\n"
			+ "}											\n";

	String expectedUnitToString =
		"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "public class X {\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";
	String testName = "test04: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		89,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		372,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 248, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 260, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 271, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 296, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 115, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 222, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 317, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 337, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 339, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 360, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test05() {

	String s =
		"package a;											\n"
			+ "import java.lang.*;							\n"
			+ "import java.util.*;							\n"
			+ "												\n"
			+ "public class X {								\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ "												\n"
			+ "		class L {								\n"
			+ "			void baz(){}						\n"
			+ "		}										\n"
			+ "												\n"
			+ "	public int h;								\n"
			+ "	public int[] i = { 0, 1 };					\n"
			+ "												\n"
			+ "	void bar(){									\n"
			+ "	void truc(){								\n"
			+ "}											\n";

	String expectedUnitToString =
		"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "public class X {\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test05: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		89,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		372,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 248, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 260, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 271, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 296, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 115, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 222, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 317, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 337, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 339, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 360, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test06() {

	String s =
		"package a;											\n"
			+ "import java.lang.*;							\n"
			+ "import java.util.*;							\n"
			+ "												\n"
			+ "public class X {								\n"
			+ " X x;										\n"
			+ " Object a, b = null;							\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ "												\n"
			+ "	public int h;								\n"
			+ "	public int[] i = { 0, 1 };					\n"
			+ "												\n"
			+ "	void bar(){									\n"
			+ "	void truc(){								\n"
			+ "}											\n";

	String expectedUnitToString =
			"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "public class X {\n"
			+ "\tX x;\n"
			+ "\tObject a;\n"
			+ "\tObject b;\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test06: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		89,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		347,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 5, fields.length);

	assertEquals("Invalid declaration source start for field x", 115, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 118, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field a", 131, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field a", 139, fields[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field b", 131, fields[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field b", 149, fields[2].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field h", 223, fields[3].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 235, fields[3].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 246, fields[4].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 271, fields[4].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 159, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 221, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 292, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 312, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 314, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 335, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test07() {

	String s =
		"package a;											\n"
			+ "import java.lang.*;							\n"
			+ "import java.util.*;							\n"
			+ "												\n"
			+ "public class X {								\n"
			+ " X x;										\n"
			+ " Object a, b = null;							\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ "												\n"
			+ "	public int h;								\n"
			+ "	public int[] i = { 0, 1 };					\n"
			+ "												\n"
			+ "	void bar(){									\n"
			+ "	void truc(){								\n"
			+ "}											\n";

	String expectedUnitToString =
			"package a;\n"
			+ "import java.lang.*;\n"
			+ "import java.util.*;\n"
			+ "public class X {\n"
			+ "\tX x;\n"
			+ "\tObject a;\n"
			+ "\tObject b;\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test07: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		89,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		347,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 5, fields.length);

	assertEquals("Invalid declaration source start for field xh", 115, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 118, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field a", 131, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field a", 139, fields[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field b", 131, fields[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field b", 149, fields[2].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field h", 223, fields[3].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 235, fields[3].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 246, fields[4].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 271, fields[4].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 159, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 221, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 292, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 312, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 314, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 335, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test08() {

	String s =
		"public class X {									\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ " 	void baz(){}							\n"
			+ " }											\n"
			+ "												\n"
			+ "	void bar(){									\n"
			+ " }											\n"
			+ "	void truc(){								\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test08: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		198,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 100, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 127, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 149, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 163, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 185, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test09() {

	String s =
		"public class X {									\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ " 	void baz(){}							\n"
			+ " }											\n"
			+ "												\n"
			+ "	void bar(){									\n"
			+ " }											\n"
			+ "	void truc(){								\n"
			+ " }											\n"
			+ "}											\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test09: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		198,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 100, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 127, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 149, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 163, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 185, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());


	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test10() {

	String s =
		"public class X {									\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ " 	void baz(){}							\n"
			+ " }											\n"
			+ "	/** comment                                 \n"
			+ "  *                                          \n"
			+ "  *                                          \n"
			+ "  */                                         \n"
			+ "                                             \n"
			+ "	void bar(){									\n"
			+ " }											\n"
			+ "	void truc(){								\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test10: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		415,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 100, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 114, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 366, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 380, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 402, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test11() {

	String s =
		"public class X {									\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ " 	void baz(){}  							\n"
			+ "	/** comment                                 \n"
			+ "  *                                          \n"
			+ "  *                                          \n"
			+ "  */                                         \n"
			+ "  int[][] j[] = null, k; // comment          \n"
			+ "                                             \n"
			+ "	void bar(){									\n"
			+ " }											\n"
			+ "	void truc(){								\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			 "public class X {\n"
			+ "\tint[][][] j;\n"
			+ "\tint[][] k;\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid baz() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test11: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		449,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);

	assertEquals("Invalid declaration source start for field j", 102, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field j", 305, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field k", 102, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field k", 308, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 4, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 76, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 79, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 90, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 378, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 400, methods[2].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 414, methods[3].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 436, methods[3].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[1].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[2].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[3].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test12() {

	String s =
			"import java.util.Enumeration;\n"
			+ "import java.util.Hashtable;"
			+ "\n"
			+ "/** comment */\n"
			+ "public class A2 {\n"
			+ "	void foo() {\n"
			+ "		System.out.println();\n"
			+ " 	void baz(){}\n"
			+ "	/** comment\n"
			+ "  *\n"
			+ "  *\n"
			+ "  */\n"
			+ "  static { } // comment\n"
			+ "  \n"
			+ "\n"
			+ "	void bar(){\n"
			+ " }\n"
			+ "	void truc(){\n"
			+ " }\n"
			+ "}\n";

	String expectedUnitToString =
			"import java.util.Enumeration;\n"
			+ "import java.util.Hashtable;\n"
			+ "public class A2 {\n"
			+ "\tstatic {}\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid baz() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test12: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		58,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		231,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 1, fields.length);

	assertEquals("Invalid declaration source start for initializer", 145, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 181, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 4, methods.length);

	assertEquals("Invalid declaration source start for method foo", 92, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 128, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 131, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 142, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 183, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 212, methods[2].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 215, methods[3].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 229, methods[3].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[1].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[2].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[3].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test13() {

	String s =
			"import java.util.Enumeration;\n"
			+ "import java.util.Hashtable;\n"
			+ "\n"
			+ "public class A2 {\n"
			+ "	void foo() {\n"
			+ "		System.out.println();\n"
			+ " 	void baz(){}\n"
			+ "  static { }\n"
			+ "  \n"
			+ "\n"
			+ "	void bar(){\n"
			+ " }\n"
			+ "	void truc(){\n"
			+ " }\n"
			+ "}\n";

	String expectedUnitToString =
			"import java.util.Enumeration;\n"
			+ "import java.util.Hashtable;\n"
			+ "public class A2 {\n"
			+ "\tstatic {}\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid baz() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";
	String testName = "test13: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		59,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		180,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);

	assertEquals(" invalid fields length", 1, fields.length);

	assertEquals("Invalid declaration source start for initializer", 132, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 141, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 4, methods.length);

	assertEquals("Invalid declaration source start for method foo", 78, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 114, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 117, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 128, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 148, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 161, methods[2].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 164, methods[3].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 178, methods[3].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[1].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[2].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[3].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test14() {

	String s =
			"import java.util.Enumeration;\n"
			+ "import java.util.Hashtable;\n"
			+ "\n"
			+ "public class A2 {\n"
			+ "	void foo() {\n"
			+ "		System.out.println();\n"
			+ " 	void baz(){}\n"
			+ "  static { }\n"
			+ " }\n"
			+ "\n"
			+ "	void bar(){\n"
			+ " }\n"
			+ "	void truc(){\n"
			+ " }\n"
			+ "}\n";

	String expectedUnitToString =
			"import java.util.Enumeration;\n"
			+ "import java.util.Hashtable;\n"
			+ "public class A2 {\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid truc() {}\n"
			+ "}";

	String testName = "test14: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		59,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		180,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("Invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 78, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 144, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 148, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 161, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 164, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 178, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test15() {

	String s =
			"public class X {								\n"
			+ " class Y {									\n"
			+ "	  void foo() {								\n"
			+ "	   System.out.println();					\n"
			+ "   }											\n"
			+ " public int h;								\n"
			+ " public int[] i = {0, 1};					\n"
			+ "	void bar(){									\n"
			+ "	void baz(){									\n"
			+ " }											\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\tclass Y {\n"
			+ "\t\tpublic int h;\n"
			+ "\t\tpublic int[] i;\n"
			+ "\t\tjava.lang.Object(0)\n"
			+ "\t\tvoid foo() {}\n"
			+ "\t\tvoid bar() {}\n"
			+ "\t\tvoid baz() {}\n"
			+ "\t}\n"
			+ "\tjava.lang.Object(0)\n"
			+ "}";

	String testName = "test15: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		227,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals(" invalid members length ", 1, members.length);

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 117, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 129, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 140, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 163, fields[1].getDeclarationSourceEnd());

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 48, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 103, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 171, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 191, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 193, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 215, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[2].getActualName());

	SourceType member = members[0];
	assertEquals(
		"Invalid class declarationSourceStart ",
		26,
		member.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		227,
		member.getDeclarationSourceEnd());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test16() {

	String s =
			"public class X {								\n"
			+ " class Y {									\n"
			+ "	  void foo() {								\n"
			+ "	   System.out.println();					\n"
			+ "   }											\n"
			+ " public int h;								\n"
			+ " public int[] i = {0, 1};					\n"
			+ "	void bar(){									\n"
			+ "	void baz(){									\n"
			+ " }											\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\tclass Y {\n"
			+ "\t\tpublic int h;\n"
			+ "\t\tpublic int[] i;\n"
			+ "\t\tvoid foo() {}\n"
			+ "\t\tvoid bar() {}\n"
			+ "\t\tvoid baz() {}\n"
			+ "\t}\n"
			+ "}";

	String testName = "test16: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		227,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals(" invalid members length ", 1, members.length);

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 117, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 129, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 140, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 163, fields[1].getDeclarationSourceEnd());

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid methods length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 48, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 103, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 171, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 191, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 193, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 215, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[2].getActualName());

	SourceType member = members[0];
	assertEquals(
		"Invalid class declarationSourceStart ",
		26,
		member.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		227,
		member.getDeclarationSourceEnd());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test17() {

	String s =
			"public class X {								\n"
			+ " class Y {									\n"
			+ "	  void foo() {								\n"
			+ "	   System.out.println();					\n"
			+ "   }											\n"
			+ " }											\n"
			+ " public int h;								\n"
			+ " public int[] i = {0, 1};					\n"
			+ "	void bar(){									\n"
			+ "	void baz(){									\n"
			+ " }											\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\tclass Y {\n"
			+ "\t\tjava.lang.Object(0)\n"
			+ "\t\tvoid foo() {}\n"
			+ "\t}\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid baz() {}\n"
			+ "}";

	String testName = "test17: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		241,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 131, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 143, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 154, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 177, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 2, methods.length);

	assertEquals("Invalid declaration source start for method bar", 185, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 205, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 207, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 229, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method bar", "bar", methods[0].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals(" invalid members length ", 1, members.length);

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields == null);

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid methods length ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 48, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 103, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType member = members[0];
	assertEquals(
		"Invalid class declarationSourceStart ",
		26,
		member.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		117,
		member.getDeclarationSourceEnd());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test18() {

	String s =
			"public class X {								\n"
			+ " class Y {									\n"
			+ "	  void foo() {								\n"
			+ "	   System.out.println();					\n"
			+ "   }											\n"
			+ " }											\n"
			+ " public int h;								\n"
			+ " public int[] i = {0, 1};					\n"
			+ "	void bar(){									\n"
			+ "	void baz(){									\n"
			+ " }											\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\tclass Y {\n"
			+ "\t\tvoid foo() {}\n"
			+ "\t}\n"
			+ "\tpublic int h;\n"
			+ "\tpublic int[] i;\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid baz() {}\n"
			+ "}";

	String testName = "test18: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		241,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for field h", 131, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 143, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 154, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 177, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 2, methods.length);

	assertEquals("Invalid declaration source start for method bar", 185, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 205, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 207, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 229, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method bar", "bar", methods[0].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals(" invalid members length ", 1, members.length);

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields == null);

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid methods length ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 48, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 103, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType member = members[0];
	assertEquals(
		"Invalid class declarationSourceStart ",
		26,
		member.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		117,
		member.getDeclarationSourceEnd());

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test19() {

	String s =
			"public class X {								\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ " }											\n"
			+ "}											\n"
			+ "	void bar(){									\n"
			+ "  int x;										\n"
			+ "	void baz(){									\n"
			+ " }											\n"
			+ " int y;										\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\t{}\n"
			+ "\tint y;\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid baz() {}\n"
			+ "}";

	String testName = "test19: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		197,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 2, fields.length);

	assertEquals("Invalid declaration source start for initializer", 90, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 90, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field y", 181, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 186, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 26, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 77, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 104, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 143, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 145, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 167, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test20() {

	String s =
			"public class X {								\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ " }											\n"
			+ "}											\n"
			+ "	void bar(){									\n"
			+ " public int x;								\n"
			+ "	void baz(){									\n"
			+ " }											\n"
			+ " int y;										\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\t{}\n"
			+ "\tpublic int x;\n"
			+ "\tint y;\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid baz() {}\n"
			+ "}";

	String testName = "test20: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		201,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 3, fields.length);

	assertEquals("Invalid declaration source start for initializer", 90, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 90, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field x", 126, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 138, fields[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field y", 185, fields[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 190, fields[2].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 26, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 77, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 104, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 124, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 149, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 171, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test21() {

	String s =
			"public class X {								\n"
			+ "	void foo() {								\n"
			+ "		System.out.println();					\n"
			+ " }											\n"
			+ "}											\n"
			+ "	void bar(){									\n"
			+ " public int x;								\n"
			+ "	void baz(){									\n"
			+ " }											\n"
			+ " int y;										\n";


	String expectedUnitToString =
			"public class X {\n"
			+ "\t{}\n"
			+ "\tpublic int x;\n"
			+ "\tint y;\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "\tvoid baz() {}\n"
			+ "}";

	String testName = "test21: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		201,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 3, fields.length);

	assertEquals("Invalid declaration source start for initializer", 90, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 90, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field x", 126, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 138, fields[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field y", 185, fields[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 190, fields[2].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 26, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 77, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 104, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 124, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method baz", 149, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method baz", 171, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method baz", "baz", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test22() {

	String s =
			"public class X extends {						\n"
			+ "	void foo() {								\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "}";

	String testName = "test22: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		67,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 32, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 54, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test23() {

	String s =
			"public class X extends Thread {				\n"
			+ "	void foo() throws							\n"
			+ "	void bar() 									\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X extends Thread {\n"
			+ "\tThread(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "}";

	String testName = "test23: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		98,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 37, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 61, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 63, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 85, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test24() {

	String s =
			"public class X implements 						\n"
			+ "	void foo() 									\n"
			+ "	void bar() 									\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "}";

	String testName = "test24: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		91,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 34, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 54, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 56, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 78, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test25() {

	String s =
			"public class X implements Y,					\n"
			+ "	void foo() 									\n"
			+ "	void bar() 									\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X implements Y, {\n"
			+ "\tjava.lang.Object(0)\n"
			+ "\tvoid foo() {}\n"
			+ "\tvoid bar() {}\n"
			+ "}";

	String testName = "test25: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		92,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("contains superinterfaces " , this.currentType.getInterfaceNames() != null);
	assertEquals(" invalid superinterfaces length ", 1, this.currentType.getInterfaceNames().length);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" invalid fields length ", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 35, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 55, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 57, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 79, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test26() {

	String s =
			"public class X implements 						\n"
			+ " class Y { 									\n"
			+ "	 void bar() 								\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tclass Y {\n"
			+ "\t\tjava.lang.Object(0)\n"
			+ "\t\tvoid bar() {}\n"
			+ "\t}\n"
			+ "\tjava.lang.Object(0)\n"
			+ "}";

	String testName = "test26: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		102,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals(" contains one member ", 1, members.length);

	assertEquals(
		"Invalid class declarationSourceStart ",
		34,
		members[0].getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		90,
		members[0].getDeclarationSourceEnd());

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one method ", 1, methods.length);

	assertEquals("Invalid declaration source start for method bar", 56, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 77, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method bar", "bar", methods[0].getActualName());

	members = members[0].getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test27() {

	String s =
		"public class X 		 						\n"
		+ " fieldX;										\n"
		+ " class Y { 									\n"
		+ "	 void bar() 								\n"
		+ " }											\n"
		+ "}											\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tclass Y {\n"
			+ "\t\tjava.lang.Object(0)\n"
			+ "\t\tvoid bar() {}\n"
			+ "\t}\n"
			+ "\tjava.lang.Object(0)\n"
			+ "}";

	String testName = "test27: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		113,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals(" contains one member ", 1, members.length);

	assertEquals(
		"Invalid class declarationSourceStart ",
		45,
		members[0].getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		101,
		members[0].getDeclarationSourceEnd());

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one method ", 1, methods.length);

	assertEquals("Invalid declaration source start for method bar", 67, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 88, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method bar", "bar", methods[0].getActualName());

	members = members[0].getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test28() {

	String s =
			"public class X 		 						\n"
			+ " fieldX;										\n"
			+ " class Y  									\n"
			+ " }											\n"
			+ "}											\n";

	String expectedUnitToString =
			"public class X {\n"
			+ "\tclass Y {\n"
			+ "\t\tjava.lang.Object(0)\n"
			+ "\t}\n"
			+ "\tjava.lang.Object(0)\n"
			+ "}";

	String testName = "test28: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		78,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals(" contains one member ", 1, members.length);

	assertEquals(
		"Invalid class declarationSourceStart ",
		45,
		members[0].getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		65,
		members[0].getDeclarationSourceEnd());

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods == null);

	members = members[0].getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test29() {

	String s =
		"package a;										\n" +
		"import java.lang.*;							\n" +
		"import java.util.*;							\n" +
		"												\n" +
		"public class X {								\n" +
		"	void foo() {								\n" +
		"		System.out.println();					\n" +
		"												\n" +
		"		class L extends {						\n" +
		"			public int l;						\n" +
		"			void baz(){}						\n" +
		"		}										\n" +
		"												\n" +
		"	public int h;								\n" +
		"												\n" +
		"	void bar(){									\n" +
		"	void truc(){								\n" +
		"}	\n";

	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tpublic int h;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tvoid foo() {}\n"
		+ "\tvoid bar() {}\n"
		+ "\tvoid truc() {}\n"
		+ "}";

	String testName = "test29: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		88,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		357,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field h", 276, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 288, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains 3 methods ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 114, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 250, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 312, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 332, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 334, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 355, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test30() {

	String s =
		"package a;										\n" +
		"import java.lang.*;							\n" +
		"import java.util.*;							\n" +
		"												\n" +
		"public class X {								\n" +
		"	void foo() {								\n" +
		"		System.out.println();					\n" +
		"												\n" +
		"		class L extends {						\n" +
		"			public int l;						\n" +
		"			void baz(){}						\n" +
		"		}										\n" +
		"												\n" +
		"	public int h;								\n" +
		"												\n" +
		"	void bar(){									\n" +
		"	void truc(){								\n" +
		"}	\n";

	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tpublic int h;\n"
		+ "\tvoid foo() {}\n"
		+ "\tvoid bar() {}\n"
		+ "\tvoid truc() {}\n"
		+ "}";

	String testName = "test30: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		88,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		357,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field h", 276, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 288, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains 3 methods ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 114, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 250, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 312, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 332, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 334, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 355, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test31() {

	String s =
		"package a;											\n" +
		"import java.lang.*;							\n" +
		"import java.util.*;							\n" +
		"												\n" +
		"public class X {								\n" +
		"	void foo() {								\n" +
		"		System.out.println();					\n" +
		"												\n" +
		"		new X(){								\n" +
		"			void baz() {}						\n" +
		"		}.baz();								\n" +
		"												\n" +
		"	public int h;								\n" +
		"												\n" +
		"	void bar(){									\n" +
		"	void truc(){								\n" +
		"}	\n";

	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tpublic int h;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tvoid foo() {}\n"
		+ "\tvoid bar() {}\n"
		+ "\tvoid truc() {}\n"
		+ "}";

	String testName = "test31: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		89,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		334,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field h", 253, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 265, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains 3 methods ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 115, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 251, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 289, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 309, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 311, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 332, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test32() {

	String s =
		"package a;											\n" +
		"import java.lang.*;							\n" +
		"import java.util.*;							\n" +
		"												\n" +
		"public class X {								\n" +
		"	void foo() {								\n" +
		"		System.out.println();					\n" +
		"												\n" +
		"		new X(){								\n" +
		"			void baz() {}						\n" +
		"												\n" +
		"		public int h;							\n" +
		"												\n" +
		"		void bar(){								\n" +
		"		void truc(){							\n" +
		"}	\n";


	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tvoid foo() {}\n"
		+ "}";

	String testName = "test32: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		89,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		315,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one methods ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 115, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 315, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test33() {

	String s =
		"package a;											\n" +
		"import java.lang.*;							\n" +
		"import java.util.*;							\n" +
		"												\n" +
		"public class X {								\n" +
		"	void foo() {								\n" +
		"		System.out.println();					\n" +
		"												\n" +
		"		new X(){								\n" +
		"			void baz() {}						\n" +
		"												\n" +
		"		public int h;							\n" +
		"												\n" +
		"		void bar(){								\n" +
		"		void truc(){							\n" +
		"}	\n";


	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tvoid foo() {}\n"
		+ "}";

	String testName = "test33: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		89,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		315,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one methods ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 115, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 315, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test34() {

	String s =
		"package a;										\n" +
		"import java.lang.*;							\n" +
		"import java.util.*;							\n" +
		"												\n" +
		"public class X {								\n" +
		"	void foo() {								\n" +
		"		System.out.println();					\n" +
		"												\n" +
		"		new X(){								\n" +
		"			void baz() 							\n" +
		"	    }										\n" +
		"	}											\n" +
		"	public int h;								\n" +
		"												\n" +
		"	void bar(){									\n" +
		"	void truc(){								\n" +
		"}												\n";

	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tpublic int h;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tvoid foo() {}\n"
		+ "\tvoid bar() {}\n"
		+ "\tvoid truc() {}\n"
		+ "}";

	String testName = "test34: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		88,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		342,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field h", 250, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field h", 262, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains 3 methods ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 114, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 236, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 286, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 306, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 308, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 329, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test35() {

	String s =
		"package a;							\n"	+
		"import java.lang.*;				\n"	+
		"import java.util.*;				\n"	+
		"									\n"	+
		"public class X {					\n"	+
		"	void foo() {					\n"	+
		"		System.out.println();		\n"	+
		"									\n"	+
		"		class L extends {			\n"	+
		"			public int l;			\n"	+
		"			void baz(){}			\n"	+
		"		}							\n"	+
		"									\n"	+
		"		int h;						\n"	+
		"									\n"	+
		"	void bar(){						\n"	+
		"	void truc(){					\n"	+
		"}									\n";

	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tvoid foo() {}\n"
		+ "\tvoid bar() {}\n"
		+ "\tvoid truc() {}\n"
		+ "}";

	String testName = "test35: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		76,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		309,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains 3 methods ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 99, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 260, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 262, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 279, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 281, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 299, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test36() {

	String s =
		"package a;							\n"	+
		"import java.lang.*;				\n"	+
		"import java.util.*;				\n"	+
		"									\n"	+
		"public class X {					\n"	+
		"	void foo() {					\n"	+
		"		System.out.println();		\n"	+
		"									\n"	+
		"		class L extends {			\n"	+
		"			public int l;			\n"	+
		"			void baz(){}			\n"	+
		"		}							\n"	+
		"									\n"	+
		"		int h;						\n"	+
		"									\n"	+
		"	void bar(){						\n"	+
		"	void truc(){					\n"	+
		"}									\n";

	String expectedUnitToString =
		"package a;\n"
		+ "import java.lang.*;\n"
		+ "import java.util.*;\n"
		+ "public class X {\n"
		+ "\tvoid foo() {}\n"
		+ "\tvoid bar() {}\n"
		+ "\tvoid truc() {}\n"
		+ "}";

	String testName = "test36: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		76,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		309,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains 3 methods ", 3, methods.length);

	assertEquals("Invalid declaration source start for method foo", 99, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 260, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 262, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 279, methods[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method truc", 281, methods[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method truc", 299, methods[2].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	assertEquals(" Invalid actual name for method truc", "truc", methods[2].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test37() {

	String s =
		"public class X {		 	\n" +
		"  int x;			 		\n"	+
		"							\n" +
		"  int foo(){ }				\n" +
		"							\n" +
		"  class Y  {				\n"	+
		"    int y;					\n" +
		"}							\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tclass Y {\n"
		+ "\t\tint y;\n"
		+ "\t\tjava.lang.Object(0)\n"
		+ "\t}\n"
		+ "\tint x;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test37: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		112,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 23, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 28, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one methods ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 46, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 57, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals("contains one member ", 1, members.length);

	assertEquals(
		"Invalid class declarationSourceStart ",
		73,
		members[0].getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		104,
		members[0].getDeclarationSourceEnd());

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field y", 92, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 97, fields[0].getDeclarationSourceEnd());

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test38() {

	String s =
		"public class X {		 	\n" +
		"  int x;			 		\n"	+
		"							\n" +
		"  int foo(){ }				\n" +
		"							\n" +
		"  class Y  {				\n"	+
		"    int y;					\n" +
		"}							\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tclass Y {\n"
		+ "\t\tint y;\n"
		+ "\t}\n"
		+ "\tint x;\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test38: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		112,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 23, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 28, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one methods ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 46, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 57, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals("contains one member ", 1, members.length);

	assertEquals(
		"Invalid class declarationSourceStart ",
		73,
		members[0].getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		104,
		members[0].getDeclarationSourceEnd());

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field y", 92, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 97, fields[0].getDeclarationSourceEnd());

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test39() {

	String s =
		"public class X {		 	\n" +
		"  int x;			 		\n"	+
		"							\n" +
		"  int foo(){ }				\n" +
		"							\n" +
		"  class Y  				\n"	+
		"}							\n" +
		"  int y;					\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tclass Y {\n"
		+ "\t\tjava.lang.Object(0)\n"
		+ "\t}\n"
		+ "\tint x;\n"
		+ "\tint y;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test39: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		109,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 2, fields.length);

	assertEquals("Invalid declaration source start for field x", 23, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 28, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field y", 98, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 103, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one methods ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 46, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 57, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals("contains one member ", 1, members.length);

	assertEquals(
		"Invalid class declarationSourceStart ",
		73,
		members[0].getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		87,
		members[0].getDeclarationSourceEnd());

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields == null);

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test40() {

	String s =
		"public class X {		 	\n" +
		"  int x;			 		\n"	+
		"							\n" +
		"  int foo(){ }				\n" +
		"							\n" +
		"  class Y  				\n"	+
		"}							\n" +
		"  int y;					\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tclass Y {\n"
		+ "\t}\n"
		+ "\tint x;\n"
		+ "\tint y;\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test40: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		109,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("contains one field ", 2, fields.length);

	assertEquals("Invalid declaration source start for field x", 23, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 28, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field y", 98, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 103, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one methods ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 46, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 57, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members != null);
	assertEquals("contains one member ", 1, members.length);

	assertEquals(
		"Invalid class declarationSourceStart ",
		73,
		members[0].getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		87,
		members[0].getDeclarationSourceEnd());

	fields = members[0].getFields();
	assertTrue(" invalid fields ", fields == null);

	methods = members[0].getMethods();
	assertTrue(" invalid methods ", methods == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test41() {

	String s =
		"public class X {				\n"+
		"	void hell" + "\\" + "u006f()\n"+
		"	static void foo() {			\n"+
		"		X x;					\n"+
		"		x = new X(23);			\n"+
		"		System.out.println();	\n"+
		"								\n"+
		"}								\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tvoid hello() {}\n"
		+ "\tstatic void foo() {}\n"
		+ "}";

	String testName = "test41: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		139,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals(" contains one methods ", 2, methods.length);

	assertEquals("Invalid declaration source start for method hello", 22, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method hello", 39, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method foo", 41, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 130, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method hello", "hell" + "\\" + "u006f", methods[0].getActualName());

	assertEquals(" Invalid actual name for method foo", "foo", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test42() {

	String s =
		"public class X {		\n" +
		"	int x				\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "}";

	String testName = "test42: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		29,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" contains one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 20, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 24, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test43() {

	String s =
		"public class X {		\n" +
		"	int x				\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "}";

	String testName = "test43: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		29,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" contains one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 20, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 24, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test44() {

	String s =
		"public class X {		\n" +
		"	int x, y			\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "\tint y;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "}";

	String testName = "test44: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		31,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" contains one field", 2, fields.length);

	assertEquals("Invalid declaration source start for field x", 20, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 25, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field y", 20, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 27, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test45() {

	String s =
		"public class X {		\n" +
		"	int x, y			\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "\tint y;\n"
		+ "}";

	String testName = "test45: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		31,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" contains one field", 2, fields.length);

	assertEquals("Invalid declaration source start for field x", 20, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 25, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field y", 20, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 27, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test46() {

	String s =
		"public class X {		\n" +
		"	String s = \"		\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tString s;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "}";

	String testName = "test46: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		34,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" contains one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field s", 20, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 34, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test47() {

	String s =
		"public class X {		\n" +
		"	String s = \"		\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tString s;\n"
		+ "}";

	String testName = "test47: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		34,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("doesn't contain superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" contains one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field s", 20, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 34, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test48() {

	String s =
		"public class X implements Y, 		\n" +
		"	String s = \"					\n";

	String expectedUnitToString =
		"public class X implements Y, String, {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "}";

	String testName = "test48: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		50,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has 2 superinterfaces " , this.currentType.getInterfaceNames() != null);
	assertEquals("2 superinterfaces " , 2, this.currentType.getInterfaceNames().length);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test49() {

	String s =
		"public class X implements Y, 		\n" +
		"	String s = \"					\n";

	String expectedUnitToString =
		"public class X implements Y, String, {\n"
		+ "}";

	String testName = "test49: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		50,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has 2 superinterfaces " , this.currentType.getInterfaceNames() != null);
	assertEquals("2 superinterfaces " , 2, this.currentType.getInterfaceNames().length);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test50() {

	String s =
		"public class X implements 		\n"+
		"int x							\n"+
		"}								\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "}";

	String testName = "test50: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		42,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 29, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 33, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test51() {

	String s =
		"public class X implements 		\n"+
		"int x							\n"+
		"}								\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "}";

	String testName = "test51: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		42,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 29, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 33, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test52() {

	String s =
		"public class X public int foo(int bar(static String s";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tstatic String s;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tpublic int foo() {}\n"
		+ "\tint bar() {}\n"
		+ "}";

	String testName = "test52: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		52,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field s", 38, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 52, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);

	assertEquals("Invalid declaration source start for method foo", 15, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 29, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 30, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 37, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test53() {

	String s =
		"public class X public int foo(int x, int bar public String s;";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tpublic String s;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tpublic int foo(int x, int bar, ) {}\n"
		+ "}";

	String testName = "test53: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		60,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field ", 1, fields.length);

	assertEquals("Invalid declaration source start for field s", 45, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 60, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has one method ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 15, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 44, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test54() {

	String s =
		"public class X 			\n" +
		"	public int foo(			\n" +
		"	int bar(				\n" +
		" 	static String s, int x	\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tstatic String s;\n"
		+ "\tint x;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tpublic int foo() {}\n"
		+ "\tint bar() {}\n"
		+ "}";

	String testName = "test54: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		78,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has 2 fields ", 2, fields.length);

	assertEquals("Invalid declaration source start for field s", 55, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 70, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field x", 72, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 76, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has 2 methods ", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 20, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 38, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 40, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 52, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test55() {

	String s =
		"public class X 			\n" +
		"	public int foo(			\n" +
		"	int bar(				\n" +
		" 	static String s, int x	\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tstatic String s;\n"
		+ "\tint x;\n"
		+ "\tpublic int foo() {}\n"
		+ "\tint bar() {}\n"
		+ "}";

	String testName = "test55: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		78,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has 2 fields ", 2, fields.length);

	assertEquals("Invalid declaration source start for field s", 55, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 70, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field x", 72, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 76, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has 2 methods ", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 20, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 38, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method bar", 40, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method bar", 52, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method bar", "bar", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test56() {

	String s =
		"class X {					\n" +
		"	String s;				\n" +
		"							\n" +
		"	public void foo(		\n" +
		"		static int x		\n" +
		"}							\n";


	String expectedUnitToString =
		"class X {\n"
		+ "\tString s;\n"
		+ "\tstatic int x;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tpublic void foo() {}\n"
		+ "}";

	String testName = "test56: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		75,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has 2 fields ", 2, fields.length);

	assertEquals("Invalid declaration source start for field s", 16, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 24, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field x", 60, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 71, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has 1 method ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 39, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 57, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test57() {

	String s =
		"class X {					\n" +
		"	String s;				\n" +
		"							\n" +
		"	public void foo(		\n" +
		"		static int x		\n" +
		"}							\n";


	String expectedUnitToString =
		"class X {\n"
		+ "\tString s;\n"
		+ "\tstatic int x;\n"
		+ "\tpublic void foo() {}\n"
		+ "}";

	String testName = "test57: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		75,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has 2 fields ", 2, fields.length);

	assertEquals("Invalid declaration source start for field s", 16, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field s", 24, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field x", 60, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 71, fields[1].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has 1 method ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 39, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 57, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test58() {

	String s =
		"public class X {			\n"+
		"	int foo(){				\n"+
		"		String s = \"		\n"+
		"	}						\n"+
		"}							\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test58: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		62,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has 1 method ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 21, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 54, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test59() {

	String s =

		"class X {									\n" +
		"	int foo(AA a, BB b, IOEx				\n" +
		"											\n";

	String expectedUnitToString =
		"class X {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tint foo(AA a, BB b, ) {}\n"
		+ "}";

	String testName = "test59: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		60,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has 1 method ", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 20, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 60, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test60() {

	String s =
		"public class X {							\n"+
		"	final static int foo(){ 				\n"+
		"		return \"1; 						\n"+
		"	} 										\n"+
		"	public static void main(String argv[]){ \n"+
		"		foo();								\n"+
		"	} 										\n"+
		"}											\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tfinal static int foo() {}\n"
		+ "\tpublic static void main(String[] argv, ) {}\n"
		+ "}";

	String testName = "test60: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		161,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has 1 method ", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 25, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 75, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method main", 89, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method main", 148, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method main", "main", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test61() {

	String s =
		"public class X {							\n"+
		"	{										\n"+
		"     int x;";

	String expectedUnitToString =
		"public class X {\n"
		+ "\t{}\n"
		+ "\tjava.lang.Object(0)\n"
		+ "}";

	String testName = "test61: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		47,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);

	assertEquals("Invalid declaration source start for initializer", 25, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 47, fields[0].getDeclarationSourceEnd());


	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test62() {

	String s =
		"public class X {							\n"+
		"   int foo(){								\n"+
		"	  if(true){								\n"+
		"     	int x;";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test62: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		78,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has one method", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 78, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test63() {

	String s =
		"public class X {							\n"+
		"   int foo(){}								\n"+
		"}											\n"+
		"int x;\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "\tjava.lang.Object(0)\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test63: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		66,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 60, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 65, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has one method", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 37, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test64() {

	String s =
		"public class X {							\n"+
		"   int foo(){}								\n"+
		"}											\n"+
		"int x;\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tint x;\n"
		+ "\tint foo() {}\n"
		+ "}";

	String testName = "test64: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		66,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field x", 60, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field x", 65, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has one method", 1, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 37, methods[0].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test65() {

	String s =
		"public class X {							\n"+
		"   int foo(){}								\n"+
		"}											\n"+
		"int x();\n";

	String expectedUnitToString =
		"public class X {\n"
		+ "\t{}\n"
		+ "\tint foo() {}\n"
		+ "\tint x() {}\n"
		+ "}";

	String testName = "test65: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		68,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals(" invalid fields length ", 1, fields.length);

	assertEquals("Invalid declaration source start for initializer", 47, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 47, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has two methods", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 27, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 37, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method x", 60, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method x", 67, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method x", "x", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test66() {

	String s =
		"public interface X {						\n"+
		"   int foo() {};							\n"+
		"}											\n"+
		"int x();\n";

	String expectedUnitToString =
		"public interface X {\n"
		+ "\tint foo() {}\n"
		+ "\tint x() {}\n"
		+ "}";

	String testName = "test66: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		72,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has two methods", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 30, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 41, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method x", 64, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method x", 71, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method x", "x", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test67() {

	String s =
		"public interface X {						\n"+
		"   int foo() {};							\n"+
		"   int x();								\n"+
		"}";

	String expectedUnitToString =
		"public interface X {\n"
		+ "\tint foo() {}\n"
		+ "\tint x() {}\n"
		+ "}";

	String testName = "test67: diet parse";
	dietParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		71,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has two methods", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 30, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 41, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method x", 54, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method x", 61, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method x", "x", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test68() {

	String s =
		"public interface X {						\n"+
		"   int foo() {};							\n"+
		"   int x();								\n"+
		"}";

	String expectedUnitToString =
		"public interface X {\n"
		+ "\tint foo() {}\n"
		+ "\tint x() {}\n"
		+ "}";

	String testName = "test68: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		71,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has two methods", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 30, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 41, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method x", 54, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method x", 61, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method x", "x", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test69() {

	String s =
		"public interface X {						\n"+
		"float y;									\n"+
		"   int foo()	;							\n"+
		"   int x();								\n"+
		"}";

	String expectedUnitToString =
		"public interface X {\n"
		+ "\tfloat y;\n"
		+ "\tint foo() {}\n"
		+ "\tint x() {}\n"
		+ "}";

	String testName = "test69: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		87,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field y", 27, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field y", 34, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has two methods", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 48, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 58, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method x", 70, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method x", 77, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method x", "x", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test70() {

	String s =
		"public interface X {						\n"+
		"   int foo();								\n"+
		"   int x();								\n"+
		"}";

	String expectedUnitToString =
		"public interface X {\n"
		+ "\tint foo() {}\n"
		+ "\tint x() {}\n"
		+ "}";

	String testName = "test70: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		69,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields == null);

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has two methods", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 30, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 39, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method x", 52, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method x", 59, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method x", "x", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test71() {

	String s =
		"public interface X {						\n"+
		"   int[] i = ;								\n"+
		"   int foo() {}							\n"+
		"   int x();								\n"+
		"}";

	String expectedUnitToString =
		"public interface X {\n"
		+ "\tint[] i;\n"
		+ "\tint foo() {}\n"
		+ "\tint x() {}\n"
		+ "}";

	String testName = "test71: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		93,
		this.currentType.getDeclarationSourceEnd());

	assertTrue("has no superinterfaces " , this.currentType.getInterfaceNames() == null);

	SourceField[] fields = this.currentType.getFields();
	assertTrue(" invalid fields ", fields != null);
	assertEquals("has one field", 1, fields.length);

	assertEquals("Invalid declaration source start for field i", 30, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field i", 49, fields[0].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods != null);
	assertEquals("has two methods", 2, methods.length);

	assertEquals("Invalid declaration source start for method foo", 53, methods[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method foo", 64, methods[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for method x", 76, methods[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for method x", 83, methods[1].getDeclarationSourceEnd());

	assertEquals(" Invalid actual name for method foo", "foo", methods[0].getActualName());

	assertEquals(" Invalid actual name for method x", "x", methods[1].getActualName());

	SourceType[] members = this.currentType.getMemberTypes();
	assertTrue(" invalid members ", members == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test72() {

	String s =
		"public class X {						\n"+
		"   X() {								\n" +
		"   	this();							\n" +
		"	}									\n" +
		"}";

	String expectedUnitToString =
		"public class X {\n"
		+ "\tX() {\n"
		+ "\t\tX(0)\n"
		+ "\t}\n"
		+ "}";

	String testName = "test72: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test73() {

	String s =
		"public class X extends Toto {			\n"+
		"   X() {								\n" +
		"   	this();							\n" +
		"	}									\n" +
		"   X(int i) {							\n" +
		"   	super();						\n" +
		"	}									\n" +
		"   X() {								\n" +
		"   	this(0);						\n" +
		"	}									\n" +
		"}";

	String expectedUnitToString =
		"public class X extends Toto {\n"
		+ "\tX() {\n"
		+ "\t\tX(0)\n"
		+ "\t}\n"
		+ "\tX(int i, ) {\n"
		+ "\t\tToto(0)\n"
		+ "\t}\n"
		+ "\tX() {\n"
		+ "\t\tX(1)\n"
		+ "\t}\n"
		+ "}";

	String testName = "test73: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test74() {

	String s =
		"public class X extends Toto {			\n"+
		"	class Y extends Throwable {			\n" +
		"	}									\n" +
		"   X() {								\n" +
		"   	this();							\n" +
		"	}									\n" +
		"   X(int i) {							\n" +
		"   	super();						\n" +
		"	}									\n" +
		"   X() {								\n" +
		"   	this(0);						\n" +
		"	}									\n" +
		"	public Object foo(int i) {			\n" +
		"		return new Object() {};			\n" +
		"	}									\n" +
		"}";

	String expectedUnitToString =
		"public class X extends Toto {\n"
		+ "\tclass Y extends Throwable {\n"
		+ "\t\tThrowable(0)\n"
		+ "\t}\n"
		+ "\tX() {\n"
		+ "\t\tX(0)\n"
		+ "\t}\n"
		+ "\tX(int i, ) {\n"
		+ "\t\tToto(0)\n"
		+ "\t}\n"
		+ "\tX() {\n"
		+ "\t\tX(1)\n"
		+ "\t}\n"
		+ "\tpublic Object foo(int i, ) {}\n"
		+ "}";

	String testName = "test74: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
/*
 * bugs  16126
 */
public void test75() {
	String s =
		"public class P#AField {\n" +
		"	public void setP#A(String P#A) {\n" +
		"		this.P#A = P#A;\n" +
		"	}\n" +
		"}";

	String expectedUnitToString =
		"public class P {\n" +
		"	{}\n" +
		"	public void setP;\n" +
		"	java.lang.Object(0)\n" +
		"	A(String P, ) {}\n" +
		"}";

	String testName = "test75: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test76() {

	String s =
		"class X {\n" +
		"  public static int j = 0;\n" +
		"  /* static */ {\n" +
		"  }" +
		"  public static int i = 9;\n" +
		"}\n";

	String expectedUnitToString =
		"class X {\n" +
		"	public static int j;\n" +
		"	{}\n" +
		"	public static int i;\n" +
		"	java.lang.Object(0)\n" +
		"}";

	String testName = "test76: full parse";
	fullParse(s,testName);

	assertEquals(
		"Invalid class declarationSourceStart ",
		0,
		this.currentType.getDeclarationSourceStart());

	assertEquals(
		"Invalid class declarationSourceEnd ",
		84,
		this.currentType.getDeclarationSourceEnd());

	SourceField[] fields = this.currentType.getFields();
	assertTrue("invalid fields ", fields != null);
	assertEquals("Invalid fields length ", 3, fields.length);

	assertEquals("Invalid declaration source start for field j", 12, fields[0].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for field j", 35, fields[0].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for initializer", 39, fields[1].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end for initializer", 56, fields[1].getDeclarationSourceEnd());

	assertEquals("Invalid declaration source start for field i", 59, fields[2].getDeclarationSourceStart());
	assertEquals("Invalid declaration source end field i", 82, fields[2].getDeclarationSourceEnd());

	SourceMethod[] methods = this.currentType.getMethods();
	assertTrue(" invalid methods ", methods == null);

	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
/**
 * Bug 99662:[1.5] JavaModel returns inexistent IType for package-info ICompilationUnits
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=99662"
 *
 */
public void testBug99662() {

	String s =
		"@Deprecated\n" +
		"package p;\n";

	String testName = "package-info.java";
	fullParse(s,testName);

	assertNull("package-info.java file should not have ANY type!",  this.currentType);
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=167357
public void _test77() {

	String s =
		"public class X {\n" +
		"	void foo() {\n" +
		"		class Y {\n" +
		"			String s = null;\n" +
		"			{\n" +
		"				class Z {\n" +
		"				}\n" +
		"			}\n" +
		"		}\n" +
		"	}\n" +
		"}";

	String expectedUnitToString =
		"public class X implements Y, String, {\n"
		+ "}";

	String testName = "test77: diet parse";
	dietParse(s,testName, true);
	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=167357
public void _test78() {

	String s =
		"public class X {\n" +
		"	void foo() {\n" +
		"		class Y {\n" +
		"			String s = null;\n" +
		"			{\n" +
		"				class Z {\n" +
		"				}\n" +
		"			}\n" +
		"		}\n" +
		"	}\n" +
		"}";

	String expectedUnitToString =
		"public class X implements Y, String, {\n"
		+ "}";

	String testName = "test78: full parse";
	fullParse(s,testName, true);
	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=167357
public void _test79() {

	String s =
		"public class X {\n" +
		"	void foo() {\n" +
		"		class Y {\n" +
		"			{\n" +
		"				class Z {\n" +
		"				}\n" +
		"			}\n" +
		"			String s = null;\n" +
		"		}\n" +
		"	}\n" +
		"}";

	String expectedUnitToString =
		"public class X implements Y, String, {\n"
		+ "}";

	String testName = "test79: diet parse";
	dietParse(s,testName, true);
	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=167357
public void _test80() {

	String s =
		"public class X {\n" +
		"	void foo() {\n" +
		"		class Y {\n" +
		"			{\n" +
		"				class Z {\n" +
		"				}\n" +
		"			}\n" +
		"			String s = null;\n" +
		"		}\n" +
		"	}\n" +
		"}";

	String expectedUnitToString =
		"public class X implements Y, String, {\n"
		+ "}";

	String testName = "test80: full parse";
	fullParse(s,testName, true);
	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
public void test81() {

	Map options = getCompilerOptions();
	options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5);
	options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5);
	options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5);
	
	String s =
		"import java.util.Collection;\n" + 
		"\n" + 
		"public class X {\n" + 
		"	public abstract class AbstractData {}\n" + 
		"	\n" + 
		"	public interface IScalarData<T extends AbstractData> {}\n" + 
		"\n" + 
		"	private static interface ValueObjectPropertyIterator {\n" + 
		"		public <T extends AbstractData> void iterateOnValueObjectProperty(IScalarData<T> scalarObject, T valueObject, Class<?> valueObjectType, final String name, final Class<?> scalarType) throws Exception;\n" + 
		"	}\n" + 
		"\n" + 
		"	private static <T extends AbstractData> void iterateOnValueObjectProperties(IScalarData<T> scalarObject, T valueObject, ValueObjectPropertyIterator valueObjectPropertyIterator) {}\n" + 
		"	\n" + 
		"	public static <T extends AbstractData> void loadScalarFromValueObject(IScalarData<T> scalarObject, T valueObject) {\n" + 
		"		iterateOnValueObjectProperties(scalarObject, valueObject, new ValueObjectPropertyIterator() {\n" + 
		"			public <T extends AbstractData> void iterateOnValueObjectProperty(IScalarData<T> scalarObject, T valueObject, Class<?> valueObjectType, String name, Class<?> scalarType) throws Exception {\n" + 
		"				if (true) {\n" + 
		"					if (true) {\n" + 
		"						if (true) {\n" + 
		"							final Collection<IScalarData<AbstractData>> lazyCollection = createLazyCollection(\n" + 
		"									name, scalarType, null, null,\n" + 
		"									new CollectionProviderForTargetCollection<IScalarData<AbstractData>>() {\n" + 
		"										@Override\n" + 
		"										public Collection<IScalarData<AbstractData>> provideCollection(\n" + 
		"												final Collection<IScalarData<AbstractData> targetCollection, final Class<IScalarData<AbstractData>> scalarCollectionType) {\n" + 
		"											return null;\n" + 
		"										}\n" + 
		"									});\n" + 
		"						}\n" + 
		"					}\n" + 
		"				}\n" + 
		"			}\n" + 
		"\n" + 
		"			abstract class CollectionProviderForTargetCollection<S> {\n" + 
		"				abstract public Collection<S> provideCollection(Collection<S> targetCollection, Class<S> scalarCollectionType);\n" + 
		"			}\n" + 
		"\n" + 
		"			private <S> Collection<S> createLazyCollection(String name,\n" + 
		"					Class<?> scalarType, final Collection<AbstractData> valueObjectCollection,\n" + 
		"					final Class<S> scalarCollectionType, CollectionProviderForTargetCollection<S> collectionProvider) {\n" + 
		"				return null;\n" + 
		"			}\n" + 
		"		});\n" + 
		"	}\n" + 
		"}";

	String expectedUnitToString =
		"import java.util.Collection;\n" + 
		"public class X {\n" + 
		"	public abstract class AbstractData {\n" + 
		"		java.lang.Object(0)\n" + 
		"	}\n" + 
		"	public interface IScalarData {\n" + 
		"	}\n" + 
		"	private static interface ValueObjectPropertyIterator {\n" + 
		"		public void iterateOnValueObjectProperty(IScalarData<T> scalarObject, T valueObject, Class<?> valueObjectType, String name, Class<?> scalarType, ) throws Exception, {}\n" + 
		"	}\n" + 
		"	java.lang.Object(0)\n" + 
		"	private static void iterateOnValueObjectProperties(IScalarData<T> scalarObject, T valueObject, ValueObjectPropertyIterator valueObjectPropertyIterator, ) {}\n" + 
		"	public static void loadScalarFromValueObject(IScalarData<T> scalarObject, T valueObject, ) {}\n" + 
		"}";

	String testName = "test81: full parse";
	fullParse(s,testName, options);
	assertEquals(
		"Invalid source " + testName,
		expectedUnitToString,
		this.currentType.toString());
}
}
