class moved
[idea/community.git] / java / java-impl / src / com / intellij / codeInsight / daemon / impl / quickfix / AddExternalLibraryToDependenciesQuickFix.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package com.intellij.codeInsight.daemon.impl.quickfix;
17
18 import com.intellij.openapi.roots.ExternalLibraryDescriptor;
19 import com.intellij.openapi.editor.Editor;
20 import com.intellij.openapi.module.Module;
21 import com.intellij.openapi.project.Project;
22 import com.intellij.openapi.roots.DependencyScope;
23 import com.intellij.openapi.roots.ProjectModelModificationService;
24 import com.intellij.psi.PsiFile;
25 import com.intellij.psi.PsiReference;
26 import com.intellij.util.IncorrectOperationException;
27 import org.jetbrains.annotations.Nls;
28 import org.jetbrains.annotations.NotNull;
29 import org.jetbrains.annotations.Nullable;
30
31 /**
32  * @author nik
33  */
34 class AddExternalLibraryToDependenciesQuickFix extends OrderEntryFix {
35   private final Module myCurrentModule;
36   private final PsiReference myReference;
37   private final ExternalLibraryDescriptor myLibraryDescriptor;
38   private final String myQualifiedClassName;
39
40   public AddExternalLibraryToDependenciesQuickFix(@NotNull Module currentModule,
41                                                   @NotNull ExternalLibraryDescriptor libraryDescriptor, @NotNull PsiReference reference,
42                                                   @Nullable String qualifiedClassName) {
43     myCurrentModule = currentModule;
44     myReference = reference;
45     myLibraryDescriptor = libraryDescriptor;
46     myQualifiedClassName = qualifiedClassName;
47   }
48
49   @Nls
50   @NotNull
51   @Override
52   public String getText() {
53     return "Add '" + myLibraryDescriptor.getPresentableName() + "' to classpath";
54   }
55
56   @Nls
57   @NotNull
58   @Override
59   public String getFamilyName() {
60     return getText();
61   }
62
63   @Override
64   public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
65     return !project.isDisposed() && !myCurrentModule.isDisposed();
66   }
67
68   @Override
69   public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
70     DependencyScope scope = suggestScopeByLocation(myCurrentModule, myReference.getElement());
71     ProjectModelModificationService.getInstance(project).addDependency(myCurrentModule, myLibraryDescriptor, scope);
72     importClass(myCurrentModule, editor, myReference, myQualifiedClassName);
73   }
74 }