/*
* ModeShape (http://www.modeshape.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.modeshape.sequencer.javafile.metadata;
import java.util.ArrayList;
import java.util.List;
/**
* Exposes meta data of a top level type.
*/
public class TypeMetadata extends AbstractMetadata {
/** The name of the supertype */
private String superTypeName;
/** All fields of a top level type */
private List<FieldMetadata> fields = new ArrayList<FieldMetadata>();
/** All methods of a top level type */
private List<MethodMetadata> methods = new ArrayList<MethodMetadata>();
/** All superinterfaces of a top level type */
private final List<String> interfaceNames = new ArrayList<String>();
/** The type of metadata */
private Type type;
protected TypeMetadata( String name,
Type type ) {
this.name = name;
this.type = type;
}
public List<String> getInterfaceNames() {
return interfaceNames;
}
/**
* Gets a ordered lists of {@link org.modeshape.sequencer.javafile.metadata.FieldMetadata} from the unit.
*
* @return all fields of this unit if there is one.
*/
public List<FieldMetadata> getFields() {
return this.fields;
}
/**
* Gets all {@link org.modeshape.sequencer.javafile.metadata.MethodMetadata} from the unit.
*
* @return all methods from the units.
*/
public List<MethodMetadata> getMethods() {
return methods;
}
public Type getType() {
return type;
}
public String getSuperTypeName() {
return superTypeName;
}
public void setSuperTypeName( String superTypeName ) {
this.superTypeName = superTypeName;
}
public static TypeMetadata classType( String name ) {
return new TypeMetadata(name, Type.CLASS);
}
public static EnumMetadata enumType( String name ) {
return new EnumMetadata(name);
}
public static TypeMetadata interfaceType( String name ) {
return new TypeMetadata(name, Type.INTERFACE);
}
public static enum Type {
CLASS,
ENUM,
INTERFACE
}
}