package bluej.parser.entity;
import java.util.List;
import bluej.debugger.gentype.JavaType;
import bluej.debugger.gentype.Reflective;
import threadchecker.OnThread;
import threadchecker.Tag;
| An unresolved subentity (an entity of form xxx.yyy, where yyy is the subentity name).
|
| @author Davin McCall
|
public class UnresolvedSubEntity
extends JavaEntity{
private JavaEntity parent;
private String name;
private Reflective accessSource;
private List<TypeArgumentEntity> typeArgs;
| Construct a new unresolved sub entity.
| @param parent The parent entity
| @param name The subentity name
| @param accessSource The access source (used for access control)
|
public UnresolvedSubEntity(JavaEntity parent, String name, Reflective accessSource)
{
this.parent = parent;
this.name = name;
this.accessSource = accessSource;
}
@Override
public JavaType getType()
{
return null;
}
@Override
public JavaEntity getSubentity(String name, Reflective accessSource)
{
return new UnresolvedSubEntity(this, name, accessSource);
}
@Override
public String getName()
{
return parent.getName() + "." + name;
}
@Override
public JavaEntity setTypeArgs(List<TypeArgumentEntity> tparams)
{
UnresolvedSubEntity newEnt = new UnresolvedSubEntity(parent, name, accessSource);
newEnt.typeArgs = tparams;
return newEnt;
}
@Override
@OnThread(Tag.FXPlatform)
public ValueEntity resolveAsValue()
{
if (typeArgs != null) {
return null;
}
JavaEntity pent = parent.resolveAsValue();
if (pent == null) {
pent = parent.resolveAsType();
}
if (pent == null) {
return null;
}
JavaEntity subEnt = pent.getSubentity(name, accessSource);
if (subEnt == null) {
return null;
}
return subEnt.resolveAsValue();
}
@Override
public TypeEntity resolveAsType()
{
PackageOrClass pent = parent.resolveAsPackageOrClass();
if (pent == null) {
return null;
}
JavaEntity subEnt = pent.getPackageOrClassMember(name);
if (subEnt == null) {
return null;
}
TypeEntity tentity = subEnt.resolveAsType();
if (tentity != null && typeArgs != null) {
tentity = tentity.setTypeArgs(typeArgs);
}
return tentity;
}
@Override
public PackageOrClass resolveAsPackageOrClass()
{
if (typeArgs != null) {
return resolveAsType();
}
PackageOrClass pent = parent.resolveAsPackageOrClass();
if (pent == null) {
return null;
}
JavaEntity subEnt = pent.getPackageOrClassMember(name);
if (subEnt == null) {
return null;
}
PackageOrClass pocEnt = subEnt.resolveAsPackageOrClass();
if (pocEnt != null && typeArgs != null) {
TypeEntity tent = pocEnt.resolveAsType();
if (tent != null) {
return tent.setTypeArgs(typeArgs);
}
return null;
}
return pocEnt;
}
}
top,
use,
map,
class UnresolvedSubEntity
. UnresolvedSubEntity
. getType
. getSubentity
. getName
. setTypeArgs
. resolveAsValue
. resolveAsType
. resolveAsPackageOrClass
165 neLoCode
+ 6 LoComm