}else{
Boolean exists = packageExistence.get(cacheKey);
if(exists != null)
return exists.booleanValue();
}
PackageSymbol ceylonPkg = packageName.equals("") ? syms().unnamedPackage : reader.enterPackage(names.fromString(packageName));
if(loadDeclarations){
logVerbose("load package "+packageName+" full");
ceylonPkg.complete();
/*
* Eventually this will go away as we get a hook from the typechecker to load on demand, but
* for now the typechecker requires at least ceylon.language to be loaded
*/
for(Symbol m : ceylonPkg.members().getElements()){
// skip things that are not classes (perhaps package-info?)
if(!(m instanceof ClassSymbol))
continue;
ClassSymbol enclosingClass = getEnclosing((ClassSymbol) m);
if(!Util.isLoadedFromSource(enclosingClass)){
m.complete();
// avoid anonymous and local classes
if(isAnonymousOrLocal((ClassSymbol) m))
continue;
// avoid member classes
if(((ClassSymbol)m).getNestingKind() != NestingKind.TOP_LEVEL)
continue;
// skip module and package descriptors
if(isModuleOrPackageDescriptorName(m.name.toString()))
continue;
convertToDeclaration(module, lookupClassMirror(module, m.getQualifiedName().toString()), DeclarationType.VALUE);
}
}
if(module.getNameAsString().equals(JAVA_BASE_MODULE_NAME)
&& packageName.equals("java.lang"))
loadJavaBaseArrays();
// a bit complicated, but couldn't find better. PackageSymbol.exists() seems to be set only by Enter which
// might be too late
return ceylonPkg.members().getElements().iterator().hasNext();
}else{
logVerbose("load package "+packageName+" light");
try {
// it is cheaper to verify that we have a class file somewhere than to complete the whole package
// just to check for its existence