package bluej.parser;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import bluej.pkgmgr.JavadocResolver;
import bluej.stride.generic.InteractionManager.Kind;
import threadchecker.OnThread;
import threadchecker.Tag;
public class ImportedTypeCompletion
extends AssistContent{
private final String type;
private final String canonicalName;
private final String packageName;
private final List<String> enclosingClasses;
private final int modifiers;
private final List<String> superTypes;
private final Kind typeKind;
private final String moduleName;
private boolean extractedJavadoc = false;
private String javadoc = null;
private final JavadocResolver resolver;
public ImportedTypeCompletion(Class<?> cls, JavadocResolver resolver)
{
this.type = cls.getSimpleName();
this.canonicalName = cls.getCanonicalName();
this.packageName = cls.getPackage().getName();
this.modifiers = cls.getModifiers();
this.moduleName = cls.getModule() != null ? cls.getModule().getName() : null;
this.enclosingClasses = new ArrayList<>();
for (Class<?> i = cls.getEnclosingClass(); i != null; i = i.getEnclosingClass())
enclosingClasses.add(0, i.getSimpleName());
this.superTypes = new ArrayList<>();
for (Class<?> i : cls.getInterfaces())
superTypes.add(i.getName());
for (Class<?> c = cls.getSuperclass(); c != null; c = c.getSuperclass())
{
superTypes.add(c.getName());
}
this.resolver = resolver;
if (cls.isInterface())
{
this.typeKind = Kind.INTERFACE;
}
else if (cls.isEnum())
{
this.typeKind = Kind.ENUM;
}
else if (cls.isPrimitive())
{
this.typeKind = Kind.PRIMITIVE;
}
else
{
this.typeKind = ((cls.getModifiers() & Modifier.FINAL) != 0) ? Kind.CLASS_FINAL : Kind.CLASS_NON_FINAL;
}
}
@Override
@OnThread(Tag.Any)
public String getName()
{
return type;
}
@Override
public List getParams()
{
return null;
}
@Override
public String getType()
{
return null;
}
@Override
public String getDeclaringClass()
{
if (enclosingClasses.isEmpty())
return null;
else{ return enclosingClasses.stream().collect(Collectors.joining("."));
}
}
@Override
public CompletionKind getKind()
{
return CompletionKind.TYPE;
}
@Override
@OnThread(Tag.FXPlatform)
public String getJavadoc()
{
if (!extractedJavadoc)
{
javadoc = resolver.getJavadoc(moduleName, canonicalName);
}
return javadoc;
}
@Override
public Access getAccessPermission()
{
return fromModifiers(modifiers);
}
@Override
public String getPackage()
{
return packageName;
}
@Override
public List getSuperTypes()
{
return superTypes;
}
@Override
public Kind getTypeKind()
{
return typeKind;
}
}
top,
use,
map,
class ImportedTypeCompletion
. ImportedTypeCompletion
. getName
. getParams
. getType
. getDeclaringClass
. getKind
. getJavadoc
. getAccessPermission
. getPackage
. getSuperTypes
. getTypeKind
182 neLoCode
+ 0 LoComm