IDEA-234984 fixes after code review
[idea/community.git] / platform / lang-api / src / com / intellij / facet / autodetecting / FacetDetector.java
1 /*
2  * Copyright 2000-2009 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
17 package com.intellij.facet.autodetecting;
18
19 import com.intellij.facet.Facet;
20 import com.intellij.facet.FacetConfiguration;
21 import com.intellij.facet.FacetModel;
22 import com.intellij.openapi.roots.ModifiableRootModel;
23 import org.jetbrains.annotations.ApiStatus;
24 import org.jetbrains.annotations.NonNls;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 import java.util.Collection;
29
30 /**
31  * @deprecated use {@link com.intellij.framework.detection.FrameworkDetector} instead
32  */
33 @Deprecated
34 @ApiStatus.ScheduledForRemoval(inVersion = "2020.2")
35 public abstract class FacetDetector<T, C extends FacetConfiguration> {
36   private final String myId;
37
38   /**
39    * @param id unique id
40    */
41   protected FacetDetector(@NonNls @NotNull final String id) {
42     myId = id;
43   }
44
45   /**
46    * @deprecated use {@link FacetDetector#FacetDetector(String)} instead
47    */
48   @Deprecated
49   protected FacetDetector() {
50     myId = getClass().getName();
51   }
52
53   public final String getId() {
54     return myId;
55   }
56
57   /**
58    * Inspect {@code source} and decide does it really descriptor of a new facet or it relates to one of the existent facets
59    * @param source {@link com.intellij.openapi.vfs.VirtualFile} or {@link com.intellij.psi.PsiFile} instance
60    * @param existentFacetConfigurations configuration of existent facet in the module
61    * @return
62    * <ul>
63    *  <li>{@code null} if {@code source} is not facet descriptor
64    *  <li>one of {@code existentFacetConfigurations} if {@code source} relates to an existent facet
65    *  <li>new facet configuration instance if {@code source} is descriptor of a new facet
66    * </ul>
67    */
68   @Nullable
69   public abstract C detectFacet(T source, Collection<C> existentFacetConfigurations);
70
71   /**
72    * Called when the detected facet is accepted by user but before the facet is added to the module
73    * @param facet facet
74    * @param facetModel facetModule
75    * @param modifiableRootModel modifiableRootModel
76    */
77   public void beforeFacetAdded(@NotNull Facet facet, final FacetModel facetModel, @NotNull ModifiableRootModel modifiableRootModel) {
78   }
79
80   /**
81    * Called when the detected facet is accepted by user and added to the module
82    * @param facet facet
83    */
84   public void afterFacetAdded(@NotNull Facet facet) {
85   }
86
87 }