/* * Copyright 2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gradle.api.internal.artifacts; import com.google.common.collect.Maps; import org.gradle.api.artifacts.ModuleIdentifier; import org.gradle.api.artifacts.ModuleVersionIdentifier; import java.util.Map; public class DefaultImmutableModuleIdentifierFactory implements ImmutableModuleIdentifierFactory { private final Map<String, Map<String, ModuleIdentifier>> groupIdToModules = Maps.newConcurrentMap(); private final Map<ModuleIdentifier, Map<String, ModuleVersionIdentifier>> idToVersions = Maps.newConcurrentMap(); @Override public ModuleIdentifier module(String group, String name) { Map<String, ModuleIdentifier> byName = groupIdToModules.get(group); if (byName == null) { byName = groupIdToModules.get(group); if (byName == null) { byName = Maps.newConcurrentMap(); groupIdToModules.put(group, byName); } } ModuleIdentifier moduleIdentifier = byName.get(name); if (moduleIdentifier == null) { moduleIdentifier = DefaultModuleIdentifier.newId(group, name); byName.put(name, moduleIdentifier); } return moduleIdentifier; } @Override public ModuleVersionIdentifier moduleWithVersion(String group, String name, String version) { ModuleIdentifier mi = module(group, name); Map<String, ModuleVersionIdentifier> byVersion = idToVersions.get(mi); if (byVersion == null) { byVersion = idToVersions.get(mi); if (byVersion == null) { byVersion = Maps.newConcurrentMap(); idToVersions.put(mi, byVersion); } } ModuleVersionIdentifier identifier = byVersion.get(version); if (identifier == null) { identifier = new DefaultModuleVersionIdentifier(mi, version); byVersion.put(version, identifier); } return identifier; } @Override public ModuleVersionIdentifier moduleWithVersion(Module module) { return moduleWithVersion(module.getGroup(), module.getName(), module.getVersion()); } }