/** * INTERNAL: Used by the BuilderInterface when reading a Project from INI files. * @param descriptor The descriptor to be added to the session and the project. * @param session The current database session. */ public void addDescriptor(final ClassDescriptor descriptor, final DatabaseSessionImpl session) { synchronized (this.descriptorsLock) { if (session.isConnected()) { final String alias = descriptor.getAlias(); // Descriptor aliases may be concurrently accessed by other threads. // Make a clone, add new descriptor to the clone, override original with the clone. if (alias != null) { final Map aliasDescriptorsClone = getAliasDescriptors() != null ? (Map)((HashMap)getAliasDescriptors()).clone() : new HashMap(); aliasDescriptorsClone.put(alias, descriptor); setAliasDescriptors(aliasDescriptorsClone); } // Descriptors may be concurrently accessed by other threads. // Make a clone, add new descriptor to the clone, override original with the clone. final Map<Class, ClassDescriptor> descriptorsClone = (Map)((HashMap)getDescriptors()).clone(); descriptorsClone.put(descriptor.getJavaClass(), descriptor); setDescriptors(descriptorsClone); session.copyDescriptorsFromProject(); session.initializeDescriptorIfSessionAlive(descriptor); getOrderedDescriptors().add(descriptor); } else { addDescriptor(descriptor); } } }
/** * INTERNAL: Used by the BuilderInterface when reading a Project from INI files. * @param descriptor The descriptor to be added to the session and the project. * @param session The current database session. */ public void addDescriptor(final ClassDescriptor descriptor, final DatabaseSessionImpl session) { synchronized (this.descriptorsLock) { if (session.isConnected()) { final String alias = descriptor.getAlias(); // Descriptor aliases may be concurrently accessed by other threads. // Make a clone, add new descriptor to the clone, override original with the clone. if (alias != null) { final Map aliasDescriptorsClone = getAliasDescriptors() != null ? (Map)((HashMap)getAliasDescriptors()).clone() : new HashMap(); aliasDescriptorsClone.put(alias, descriptor); setAliasDescriptors(aliasDescriptorsClone); } // Descriptors may be concurrently accessed by other threads. // Make a clone, add new descriptor to the clone, override original with the clone. final Map<Class, ClassDescriptor> descriptorsClone = (Map)((HashMap)getDescriptors()).clone(); descriptorsClone.put(descriptor.getJavaClass(), descriptor); setDescriptors(descriptorsClone); session.copyDescriptorsFromProject(); session.initializeDescriptorIfSessionAlive(descriptor); getOrderedDescriptors().add(descriptor); } else { addDescriptor(descriptor); } } }
setAliasDescriptors(aliasDescriptorsClone);
setAliasDescriptors(aliasDescriptorsClone);