11dda1bcc7c3d19f5449fe4b2de3888fd6227c71
[idea/community.git] / platform / lang-api / src / com / intellij / facet / FacetModel.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2
3 package com.intellij.facet;
4
5 import org.jetbrains.annotations.NotNull;
6 import org.jetbrains.annotations.Nullable;
7
8 import java.util.Collection;
9
10 /**
11  * @author nik
12  */
13 public interface FacetModel {
14   /**
15    * Returns all facets in the module sorted in such a way that a facet will occur before any of its subfacets
16    * @return sorted array of facets
17    */
18   @NotNull
19   Facet<?>[] getSortedFacets();
20
21   /**
22    * @return all facets in the module
23    */
24   @NotNull
25   Facet<?>[] getAllFacets();
26
27   /**
28    * @param typeId type of facets
29    * @return all facets of the given type
30    */
31   @NotNull
32   <F extends Facet<?>> Collection<F> getFacetsByType(FacetTypeId<F> typeId);
33
34   /**
35    * @param typeId type of facet
36    * @return first facet of the given type or {@code null} if the module doesn't contain facets of this type
37    */
38   @Nullable
39   <F extends Facet<?>> F getFacetByType(FacetTypeId<F> typeId);
40
41   /**
42    * @param type type of facet
43    * @param name name of facet
44    * @return first facet of the given type with the given name or {@code null} if not found
45    */
46   @Nullable
47   <F extends Facet<?>> F findFacet(FacetTypeId<F> type, String name);
48
49   /**
50    * @param underlyingFacet facet
51    * @param typeId type of subfacet
52    * @return first subfacet of the given facet
53    */
54   @Nullable
55   <F extends Facet<?>> F getFacetByType(@NotNull Facet<?> underlyingFacet, FacetTypeId<F> typeId);
56
57   /**
58    * @param underlyingFacet facet
59    * @param typeId type of subfacet
60    * @return all subfacets of the given facet
61    */
62   @NotNull
63   <F extends Facet<?>> Collection<F> getFacetsByType(@NotNull Facet<?> underlyingFacet, FacetTypeId<F> typeId);
64
65   @NotNull
66   String getFacetName(@NotNull Facet<?> facet);
67 }