content: /*******************************************************************************
   * Copyright (c) 2000, 2008 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.wst.jsdt.internal.corext.refactoring.typeconstraints.types;
  
  import org.eclipse.wst.jsdt.core.IJavaScriptProject;
  
  
  public final class PrimitiveType extends TType {
  
  	/** Type code for the primitive type "int". */
  	public static final int INT = 0;
  	/** Type code for the primitive type "char". */
  	public static final int CHAR = 1;
  	/** Type code for the primitive type "boolean". */
  	public static final int BOOLEAN = 2;
  	/** Type code for the primitive type "short". */
  	public static final int SHORT = 3;
  	/** Type code for the primitive type "long". */
  	public static final int LONG = 4;
  	/** Type code for the primitive type "float". */
  	public static final int FLOAT = 5;
  	/** Type code for the primitive type "double". */
  	public static final int DOUBLE = 6;
  	/** Type code for the primitive type "byte". */
  	public static final int BYTE = 7;
  	
  	static final String[] NAMES= {
  		"int",  //$NON-NLS-1$
  		"char",  //$NON-NLS-1$
  		"boolean",  //$NON-NLS-1$
  		"short",  //$NON-NLS-1$
  		"long",  //$NON-NLS-1$
  		"float",  //$NON-NLS-1$
  		"double",  //$NON-NLS-1$
  		"byte"};  //$NON-NLS-1$
  	
  	private int fId;
  	
  	protected PrimitiveType(TypeEnvironment environment, int id, String signature) {
  		super(environment, signature);
  		fId= id;
  	}
  	
  	public int getId() {
  		return fId;
  	}
  	
  	public int getKind() {
  		return PRIMITIVE_TYPE;
  	}
  	
  	protected boolean doEquals(TType type) {
  		return fId == ((PrimitiveType)type).fId;
  	}
  
  	protected boolean doCanAssignTo(TType lhs) {
  		if (lhs.getKind() != PRIMITIVE_TYPE) {
  			if (lhs.getKind() == STANDARD_TYPE) {
  				IJavaScriptProject javaProject= ((StandardType)lhs).getJavaElementType().getJavaScriptProject();
  				return getEnvironment().createBoxed(this, javaProject).canAssignTo(lhs);
  			}
  			return false;
  		}
  		
  		switch (((PrimitiveType)lhs).fId) {
  			case BOOLEAN :
  			case BYTE :
  			case CHAR :
  				return false;
  			case DOUBLE :
  				switch (fId) {
  					case BYTE :
  					case CHAR :
  					case SHORT :
  					case INT :
  					case LONG :
  					case FLOAT :
  						return true;
  					default :
  						return false;
  				}
  			case FLOAT :
  				switch (fId) {
  					case BYTE :
  					case CHAR :
  					case SHORT :
  					case INT :
  					case LONG :
  						return true;
  					default :
  						return false;
  				}
  			case LONG :
  				switch (fId) {
  					case BYTE :
  					case CHAR :
  					case SHORT :
  					case INT :
  						return true;
  					default :
  						return false;
  				}
  			case INT :
  				switch (fId) {
  					case BYTE :
  					case CHAR :
  					case SHORT :
  						return true;
  					default :
  						return false;
  				}
  			case SHORT :
  				return (fId == BYTE);
  		}
  		return false;
  	}
  	
  	public String getName() {
  		return NAMES[fId];
  	}
  	
  	protected String getPlainPrettySignature() {
  		return NAMES[fId];
  	}
  }
  