package com.fasterxml.classmate.types;
import java.util.*;
import com.fasterxml.classmate.ResolvedType;
import com.fasterxml.classmate.TypeBindings;
import com.fasterxml.classmate.members.RawField;
import com.fasterxml.classmate.members.RawMethod;
public class ResolvedInterfaceType extends ResolvedType
{
List of interfaces this type implements; may be empty but never null
/**
* List of interfaces this type implements; may be empty but never null
*/
protected final ResolvedType[] _superInterfaces;
Interfaces can have static final (constant) fields.
/**
* Interfaces can have static final (constant) fields.
*/
protected RawField[] _constantFields;
Interface methods are all public and abstract.
/**
* Interface methods are all public and abstract.
*/
protected RawMethod[] _memberMethods;
/*
/**********************************************************************
/* Life cycle
/**********************************************************************
*/
public ResolvedInterfaceType(Class<?> erased, TypeBindings bindings,
ResolvedType[] superInterfaces)
{
super(erased, bindings);
_superInterfaces = (superInterfaces == null ? NO_TYPES : superInterfaces);
}
@Override
public boolean canCreateSubtypes() {
return true;
}
/*
/**********************************************************************
/* Accessors for related types
/**********************************************************************
*/
@Override
public ResolvedType getParentClass() {
// interfaces do not have parent class, just interfaces
return null;
}
@Override
public ResolvedType getSelfReferencedType() { return null; }
@Override
public List<ResolvedType> getImplementedInterfaces() {
return (_superInterfaces.length == 0) ?
Collections.<ResolvedType>emptyList() : Arrays.asList(_superInterfaces);
}
@Override
public ResolvedType getArrayElementType() { // interfaces are never arrays, so:
return null;
}
/*
/**********************************************************************
/* Simple property accessors
/**********************************************************************
*/
@Override
public boolean isInterface() { return true; }
@Override
public boolean isAbstract() { return true; }
@Override
public boolean isArray() { return false; }
@Override
public boolean isPrimitive() { return false; }
/*
/**********************************************************************
/* Accessors for raw (minimally procesed) members
/**********************************************************************
*/
@Override
public synchronized List<RawField> getStaticFields()
{
// Interfaces can have static fields, but only as static constants...
if (_constantFields == null) {
_constantFields = _getFields(true);
}
if (_constantFields.length == 0) {
return Collections.emptyList();
}
return Arrays.asList(_constantFields);
}
@Override
public synchronized List<RawMethod> getMemberMethods()
{
if (_memberMethods == null) {
_memberMethods = _getMethods(false);
}
if (_memberMethods.length == 0) {
return Collections.emptyList();
}
return Arrays.asList(_memberMethods);
}
/*
/**********************************************************************
/* String representations
/**********************************************************************
*/
@Override
public StringBuilder appendSignature(StringBuilder sb) {
return _appendClassSignature(sb);
}
@Override
public StringBuilder appendErasedSignature(StringBuilder sb) {
return _appendErasedClassSignature(sb);
}
@Override
public StringBuilder appendBriefDescription(StringBuilder sb) {
return _appendClassDescription(sb);
}
@Override
public StringBuilder appendFullDescription(StringBuilder sb)
{
sb = _appendClassDescription(sb);
// interfaces 'extend' other interfaces...
int count = _superInterfaces.length;
if (count > 0) {
sb.append(" extends ");
for (int i = 0; i < count; ++i) {
if (i > 0) {
sb.append(",");
}
sb = _superInterfaces[i].appendBriefDescription(sb);
}
}
return sb;
}
}