Don't show welcome screen in DataGrip on window closing if `Skip welcome screen and...
[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 @ApiStatus.NonExtendable
12 public interface FacetModel {
13   /**
14    * Returns all facets in the module sorted in such a way that a facet will occur before any of its subfacets
15    * @return sorted array of facets
16    */
17   Facet<?> @NotNull [] getSortedFacets();
18
19   /**
20    * @return all facets in the module
21    */
22   Facet<?> @NotNull [] getAllFacets();
23
24   /**
25    * @param typeId type of facets
26    * @return all facets of the given type
27    */
28   @NotNull
29   <F extends Facet<?>> Collection<F> getFacetsByType(FacetTypeId<F> typeId);
30
31   /**
32    * @param typeId type of facet
33    * @return first facet of the given type or {@code null} if the module doesn't contain facets of this type
34    */
35   @Nullable
36   <F extends Facet<?>> F getFacetByType(FacetTypeId<F> typeId);
37
38   /**
39    * @param type type of facet
40    * @param name name of facet
41    * @return first facet of the given type with the given name or {@code null} if not found
42    */
43   @Nullable
44   <F extends Facet<?>> F findFacet(FacetTypeId<F> type, String name);
45
46   /**
47    * @param underlyingFacet facet
48    * @param typeId type of subfacet
49    * @return first subfacet of the given facet
50    */
51   @Nullable
52   <F extends Facet<?>> F getFacetByType(@NotNull Facet<?> underlyingFacet, FacetTypeId<F> typeId);
53
54   /**
55    * @param underlyingFacet facet
56    * @param typeId type of subfacet
57    * @return all subfacets of the given facet
58    */
59   @NotNull
60   <F extends Facet<?>> Collection<F> getFacetsByType(@NotNull Facet<?> underlyingFacet, FacetTypeId<F> typeId);
61
62   @NotNull
63   String getFacetName(@NotNull Facet<?> facet);
64 }