@SuppressWarnings("unchecked") final <T extends SType<?>> void registerType(@Nonnull SScope scope, @Nonnull T newType, @Nullable Class<T> classForRegister) { if (classForRegister != null) { Class<? extends SPackage> packageClass = SFormUtil.getTypePackage(classForRegister); SPackage packageAnnotation = packages.getOrNewInstance(packageClass); SPackage packageDestiny = scope.getPackage(); if (!packageDestiny.getName().equals(packageAnnotation.getName())) { throw new SingularFormException( "Tentativa de carregar o tipo '" + newType.getNameSimple() + "' anotado para o pacote '" + packageAnnotation.getName() + "' como sendo do pacote '" + packageDestiny.getName() + "'", newType); } } newType.setScope(scope); newType.resolveSuperType(this); newType.setTypeId(++idCount); ((SScopeBase) scope).register(newType); typeByClass.put(classForRegister, newType); }
@SuppressWarnings("unchecked") final <T extends SType<?>> void registeType(SScope scope, T newType, Class<T> classForRegister) { if (classForRegister != null) { Class<? extends SPackage> classePacoteAnotado = SFormUtil.getTypePackage(classForRegister); SPackage pacoteAnotado = packages.getOrNewInstance(classePacoteAnotado); SPackage pacoteDestino = findPackage(scope); if (pacoteDestino == null) { throw new SingularFormException("O pacote de destino para carregar o tipo " + newType.getNameSimple() + " não pode ser nulo."); } if (!pacoteDestino.getName().equals(pacoteAnotado.getName())) { throw new SingularFormException( "Tentativa de carregar o tipo '" + newType.getNameSimple() + "' anotado para o pacote '" + pacoteAnotado.getName() + "' como sendo do pacote '" + pacoteDestino.getName() + "'", newType); } } newType.setScope(scope); newType.resolvSuperType(this); newType.setTypeId(++idCount); types.verifyMustNotBePresent(newType, this); ((SScopeBase) scope).register(newType); types.add(newType, (Class<SType<?>>) classForRegister); }