/*******************************************************************************
* Copyright (c) 2007 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.core.type;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.StandardClassMetadata;
/**
* Interface that defines abstract metadata of a specific class, in a form that
* does not require that class to be loaded yet.
* @author Christian Dupuis
* @author Juergen Hoeller
* @since 2.0.2
* @see StandardClassMetadata
* @see org.springframework.ide.eclipse.core.type.asm.ClassMetadataReadingVisitor
* @see AnnotationMetadata
*/
public interface ClassMetadata {
/**
* Return the name of the underlying class.
*/
String getClassName();
/**
* Return whether the underlying class represents an interface.
*/
boolean isInterface();
/**
* Return whether the underlying class is marked as abstract.
*/
boolean isAbstract();
/**
* Return whether the underlying class represents a concrete class, i.e.
* neither an interface nor an abstract class.
*/
boolean isConcrete();
/**
* Return whether the underlying class has a super class.
*/
boolean hasSuperClass();
/**
* Return the name of the super class of the underlying class, or
* <code>null</code> if there is no super class defined.
*/
String getSuperClassName();
/**
* Return the name of all interfaces that the underlying class implements,
* or an empty array if there are none.
*/
String[] getInterfaceNames();
}