gt: 		for (int i = 0; i < this.problems.length; i++) {
context: /*******************************************************************************
   * Copyright (c) 2000, 2010 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.internal.eval;
  
  import org.eclipse.jdt.core.compiler.CategorizedProblem;
  
  /**
   * An EvaluationResult is the result of a code snippet evaluation, a global
   * variable evaluation or it is used to report problems against imports and
   * package declaration.
   * It primarily contains the representation of the resulting value (e.g. its
   * toString() representation). However if the code snippet, a global variable
   * definition, an import or the package declaration could not be compiled, it
   * contains the corresponding compilation problems.
   */
  public class EvaluationResult {
  
  	static final CategorizedProblem[] NO_PROBLEMS = new CategorizedProblem[0];
  
  	char[] evaluationID;
  	int evaluationType;
  	CategorizedProblem[] problems;
  	char[] displayString;
  	char[] typeName;
  
  	/**
  	 * The evaluation result contains the value of a variable or
  	 * it reports a problem on a variable. Note that if the problem is
  	 * on the type of the variable, the source line number is -1. If the
  	 * problem is on the name of the variable, the source line number is 0.
  	 * Otherwise the source line number is relative to the initializer code.
  	 */
  	public static final int T_VARIABLE = 1;
  
  	/**
  	 * The evaluation result contains the value of a code snippet or
  	 * it reports a problem on a code snippet.
  	 */
  	public static final int T_CODE_SNIPPET = 2;
  
  	/**
  	 * The evaluation result reports a problem on an import declaration.
  	 */
  	public static final int T_IMPORT = 3;
  
  	/**
  	 * The evaluation result reports a problem on a package declaration.
  	 */
  	public static final int T_PACKAGE = 4;
  
  	/**
  	 * The evaluation result reports an internal problem.
  	 */
  	public static final int T_INTERNAL = 5;
  
  public EvaluationResult(char[] evaluationID, int evaluationType, char[] displayString, char[] typeName) {
  	this.evaluationID = evaluationID;
  	this.evaluationType = evaluationType;
  	this.displayString = displayString;
  	this.typeName = typeName;
  	this.problems = NO_PROBLEMS;
  }
  public EvaluationResult(char[] evaluationID, int evaluationType, CategorizedProblem[] problems) {
  	this.evaluationID = evaluationID;
  	this.evaluationType = evaluationType;
  	this.problems = problems;
  }
  /**
   * Adds the given problem to the list of problems of this evaluation result.
   */
  void addProblem(CategorizedProblem problem) {
  	CategorizedProblem[] existingProblems = this.problems;
  	int existingLength = existingProblems.length;
  	this.problems = new CategorizedProblem[existingLength + 1];
  	System.arraycopy(existingProblems, 0, this.problems, 0, existingLength);
  	this.problems[existingLength] = problem;
  }
  /**
   * Returns the ID of the evaluation.
   * If the result is about a global variable, returns the name of the variable.
   * If the result is about a code snippet, returns the code snippet.
   * If the result is about an import, returns the import.
   * If the result is about a package declaration, returns the package declaration.
   */
  public char[] getEvaluationID() {
  	return this.evaluationID;
  }
  /**
   * Returns the type of evaluation this result is about.
   * This indicates if the result is about a global variable,
   * a code snippet, an import or a package declaration.
   * Use getEvaluationID() to get the object itself.
   */
  public int getEvaluationType() {
  	return this.evaluationType;
  }
  /**
   * Returns an array of problems (errors and warnings) encountered
   * during the compilation of a code snippet or a global variable definition,
   * or during the analysis of a package name or an import.
   * Returns an empty array if there are no problems.
   */
  public CategorizedProblem[] getProblems() {
  	return this.problems;
  }
  /**
   * Returns a proxy object on this result's value.
   * Returns null if the result's value is null.
   * The returned value is undefined if there is no result.
   * The proxy object is expected to answer questions like:
   *   - What is the proxy type for this object?
   *	 - What is the toString() representation for this object?
   *   - What are the field names of this object?
   *   - What is the value for a given field name?
   * Special proxy objects are expected if the value is a primitive type.
   */
  public Object getValue() {
  	return null; // Not yet implemented
  }
  /**
   * Returns the displayable representation of this result's value.
   * This is obtained by sending toString() to the result object on the target side
   * if it is not a primitive value. If it is a primitive value, the corresponding
   * static toString(...) is used, e.g. Integer.toString(int n) if it is an int.
   * Returns null if there is no value.
   */
  public char[] getValueDisplayString() {
  	return this.displayString;
  }
  /**
   * Returns the dot-separated fully qualified name of this result's value type.
   * If the value is a primitive value, returns the toString() representation of its type
   * (e.g. "int", "boolean", etc.)
   * Returns null if there is no value.
   */
  public char[] getValueTypeName() {
  	return this.typeName;
  }
  /**
   * Returns whether there are errors in the code snippet or the global variable definition.
   */
  public boolean hasErrors() {
  	if (this.problems == null) {
  		return false;
  	} else {
  		for (int i = 0; i < this.problems.length; i++) {
  			if (this.problems[i].isError()) {
  				return true;
  			}
  		}
  		return false;
  	}
  }
  /**
   * Returns whether there are problems in the code snippet or the global variable definition.
   */
  public boolean hasProblems() {
  	return (this.problems != null) && (this.problems.length != 0);
  }
  /**
   * Returns whether this result has a value.
   */
  public boolean hasValue() {
  	return this.displayString != null;
  }
  /**
   * Returns whether there are warnings in the code snippet or the global variable definition.
   */
  public boolean hasWarnings() {
  	if (this.problems == null) {
  		return false;
  	} else {
  		for (int i = 0; i < this.problems.length; i++) {
  			if (this.problems[i].isWarning()) {
  				return true;
  			}
  		}
  		return false;
  	}
  }
  /**
   * Returns a readable representation of this result.
   * This is for debugging purpose only.
   */
  public String toString() {
  	StringBuffer buffer = new StringBuffer();
  	switch (this.evaluationType) {
  		case T_CODE_SNIPPET:
  			buffer.append("Code snippet"); //$NON-NLS-1$
  			break;
  		case T_IMPORT:
  			buffer.append("Import"); //$NON-NLS-1$
  			break;
  		case T_INTERNAL:
  			buffer.append("Internal problem"); //$NON-NLS-1$
  			break;
  		case T_PACKAGE:
  			buffer.append("Package"); //$NON-NLS-1$
  			break;
  		case T_VARIABLE:
  			buffer.append("Global variable"); //$NON-NLS-1$
  			break;
  	}
  	buffer.append(": "); //$NON-NLS-1$
  	buffer.append(this.evaluationID == null ? "<unknown>".toCharArray() : this.evaluationID);  //$NON-NLS-1$
  	buffer.append("\n"); //$NON-NLS-1$
  	if (hasProblems()) {
  		buffer.append("Problems:\n"); //$NON-NLS-1$
  