blob: 4a39bc0b3797aed1fe440b65637bfdf100f19c82 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 Oracle 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.common.runtime.internal.model.types;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* A type info that has class information.
*
* @author cbateman
*
*/
public abstract class ClassTypeInfo extends TypeInfo implements IClassTypeInfo
{
/**
* serializable id
*/
private static final long serialVersionUID = -5046230589012357680L;
/**
* the fully qualified class name of the implementation class for this
* type.
*/
protected final String _className;
/**
* known super classes of the component class
*/
protected final String[] _superClasses;
/**
* known interfaces implemented by the component class
*/
protected final String[] _interfaces;
/**
* used internally by isInstanceOf
*/
private Set _superTypes; // may be lazily constructed
/**
* @param className
* @param superClasses
* @param interfaces
*/
protected ClassTypeInfo(final String className, final String[] superClasses, final String[] interfaces)
{
_className = className;
_superClasses = superClasses != null ? superClasses : new String[0];
_interfaces = interfaces != null ? interfaces : new String[0];
if (_superClasses.length + _interfaces.length == 0)
{
// there are no super-types known
_superTypes = Collections.EMPTY_SET;
}
}
public final String[] getInterfaces()
{
if (_interfaces.length > 0)
{
final String[] copy = new String[_interfaces.length];
System.arraycopy(_interfaces, 0, copy, 0, _interfaces.length);
return copy;
}
return new String[0];
}
public final String[] getSuperClasses()
{
if (_superClasses.length > 0)
{
final String[] copy = new String[_superClasses.length];
System.arraycopy(_superClasses, 0, copy, 0, _superClasses.length);
return copy;
}
return new String[0];
}
public final boolean isInstanceOf(String checkType)
{
if (_superTypes == null)
{
_superTypes = new HashSet();
_superTypes.addAll(Arrays.asList(_superClasses));
_superTypes.addAll(Arrays.asList(_interfaces));
}
return _superTypes.contains(checkType);
}
public final String getClassName()
{
return _className;
}
public String toString()
{
String supers = "["; //$NON-NLS-1$
for (int i = 0; i < _superClasses.length; i++)
{
supers += _superClasses[i];
if (i < _superClasses.length)
{
supers += ","; //$NON-NLS-1$
}
}
for (int i = 0; i < _interfaces.length; i++)
{
supers += _interfaces[i];
if (i < _interfaces.length-1)
{
supers += ","; //$NON-NLS-1$
}
}
supers +="]"; //$NON-NLS-1$
return "class= "+getClassName()+ ", supers="+ supers; //$NON-NLS-1$ //$NON-NLS-2$
}
}