示例#1
0
    private static Map<String, BootstrapPackage> getPackagesMap(Database database) {
      Map<String, BootstrapPackage> packagesByName = new TreeMap<String, BootstrapPackage>();
      // First create the _init package for the whole database
      BootstrapPackage initPkg = new BootstrapPackage();
      initPkg.setName(INIT_NAME);
      initPkg.setIsInit(true);
      packagesByName.put(INIT_NAME, initPkg);

      for (ObjectType type : database.getEnvironment().getTypes()) {
        TypeData bmod = type.as(TypeData.class);
        for (String name : bmod.getPackageNames()) {
          BootstrapPackage pkg = packagesByName.get(name);
          if (pkg == null) {
            pkg = new BootstrapPackage();
            pkg.setName(name);
            packagesByName.put(name, pkg);
          }
          pkg.getTypes().add(type);
        }
      }
      for (BootstrapPackage pkg : Query.from(BootstrapPackage.class).using(database).selectAll()) {
        packagesByName.put(pkg.getName(), pkg);
      }
      for (Map.Entry<String, BootstrapPackage> entry : packagesByName.entrySet()) {
        checkConsistency(
            database,
            entry.getValue(),
            new HashSet<BootstrapPackage>(packagesByName.values()),
            null);
      }
      return packagesByName;
    }
 protected TypeData prepareMerge(TypeData typeData, ITypeReferenceOwner owner) {
   LightweightTypeReference typeReference = typeData.getActualType();
   if (typeData.isOwnedBy(owner) && !(typeReference instanceof UnboundTypeReference))
     return typeData;
   if (typeReference instanceof UnboundTypeReference
       && super.isResolved(((UnboundTypeReference) typeReference).getHandle())) {
     typeReference = typeReference.getUpperBoundSubstitute();
   }
   return new TypeData(
       typeData.getExpression(),
       typeData.getExpectation().copyInto(owner),
       typeReference.copyInto(owner),
       typeData.getConformanceFlags(),
       typeData.isReturnType());
 }