2 * Copyright 2000-2015 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.openapi.roots;
18 import com.intellij.openapi.components.ServiceManager;
19 import com.intellij.openapi.module.Module;
20 import com.intellij.openapi.project.Project;
21 import com.intellij.openapi.roots.libraries.Library;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.concurrency.Promise;
25 import java.util.Collection;
26 import java.util.Collections;
29 * Provides methods to perform high-level modifications of project configuration accordingly with dependency management system used in the
30 * project. E.g. if the project is imported from Maven the methods will modify pom.xml files and invoke reimporting to update IDEA's
31 * project model. Since importing the changes to IDEA's project model may take a while the method work asynchronously and returns
32 * {@link Promise} objects which may be used to be notified when the project configuration is finally updated.
34 * @see ProjectModelModifier
38 public abstract class ProjectModelModificationService {
39 public static ProjectModelModificationService getInstance(@NotNull Project project) {
40 return ServiceManager.getService(project, ProjectModelModificationService.class);
43 public Promise<Void> addDependency(@NotNull Module from, @NotNull Module to) {
44 return addDependency(from, to, DependencyScope.COMPILE);
47 public abstract Promise<Void> addDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope);
49 public Promise<Void> addDependency(@NotNull Module from, @NotNull ExternalLibraryDescriptor libraryDescriptor) {
50 return addDependency(from, libraryDescriptor, DependencyScope.COMPILE);
53 public Promise<Void> addDependency(@NotNull Module from, @NotNull ExternalLibraryDescriptor descriptor, @NotNull DependencyScope scope) {
54 return addDependency(Collections.singletonList(from), descriptor, scope);
57 public abstract Promise<Void> addDependency(@NotNull Collection<Module> from, @NotNull ExternalLibraryDescriptor libraryDescriptor,
58 @NotNull DependencyScope scope);
60 public abstract Promise<Void> addDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope);