[facets API] mark some interfaces in Facets API as NonExtendable
[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.ApiStatus;
6 import org.jetbrains.annotations.NotNull;
7 import org.jetbrains.annotations.Nullable;
8
9 import java.util.Collection;
10
11 /**
12  * @author nik
13  */
14 @ApiStatus.NonExtendable
15 public interface FacetModel {
16   /**
17    * Returns all facets in the module sorted in such a way that a facet will occur before any of its subfacets
18    * @return sorted array of facets
19    */
20   @NotNull
21   Facet<?>[] getSortedFacets();
22
23   /**
24    * @return all facets in the module
25    */
26   @NotNull
27   Facet<?>[] getAllFacets();
28
29   /**
30    * @param typeId type of facets
31    * @return all facets of the given type
32    */
33   @NotNull
34   <F extends Facet<?>> Collection<F> getFacetsByType(FacetTypeId<F> typeId);
35
36   /**
37    * @param typeId type of facet
38    * @return first facet of the given type or {@code null} if the module doesn't contain facets of this type
39    */
40   @Nullable
41   <F extends Facet<?>> F getFacetByType(FacetTypeId<F> typeId);
42
43   /**
44    * @param type type of facet
45    * @param name name of facet
46    * @return first facet of the given type with the given name or {@code null} if not found
47    */
48   @Nullable
49   <F extends Facet<?>> F findFacet(FacetTypeId<F> type, String name);
50
51   /**
52    * @param underlyingFacet facet
53    * @param typeId type of subfacet
54    * @return first subfacet of the given facet
55    */
56   @Nullable
57   <F extends Facet<?>> F getFacetByType(@NotNull Facet<?> underlyingFacet, FacetTypeId<F> typeId);
58
59   /**
60    * @param underlyingFacet facet
61    * @param typeId type of subfacet
62    * @return all subfacets of the given facet
63    */
64   @NotNull
65   <F extends Facet<?>> Collection<F> getFacetsByType(@NotNull Facet<?> underlyingFacet, FacetTypeId<F> typeId);
66
67   @NotNull
68   String getFacetName(@NotNull Facet<?> facet);
69 }