63f76f12d0b9633ba3c0cf24f77c8bf021593390
[idea/community.git] / platform / lang-api / src / com / intellij / facet / FacetManager.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 com.intellij.openapi.module.Module;
6 import com.intellij.util.messages.Topic;
7 import org.jetbrains.annotations.ApiStatus;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.annotations.Nullable;
10
11 @ApiStatus.NonExtendable
12 public abstract class FacetManager implements FacetModel {
13   public static final Topic<FacetManagerListener> FACETS_TOPIC = Topic.create("facet changes", FacetManagerListener.class, Topic.BroadcastDirection.TO_PARENT);
14
15   public static FacetManager getInstance(@NotNull Module module) {
16     return module.getComponent(FacetManager.class);
17   }
18
19   /**
20    * Creates the interface for modifying set of facets in the module. Call {@link ModifiableFacetModel#commit()} when modification is finished
21    * @return the modifiable facet model
22    */
23   @NotNull
24   public abstract ModifiableFacetModel createModifiableModel();
25
26   @NotNull
27   public abstract <F extends Facet<?>, C extends FacetConfiguration> F createFacet(@NotNull FacetType<F, C> type, @NotNull String name,
28                                                                                    @NotNull C configuration, @Nullable Facet<?> underlying);
29
30
31   @NotNull
32   public abstract <F extends Facet<?>, C extends FacetConfiguration> F createFacet(@NotNull FacetType<F, C> type, @NotNull String name,
33                                                                                    @Nullable Facet<?> underlying);
34
35   @NotNull
36   public abstract <F extends Facet<?>, C extends FacetConfiguration> F addFacet(@NotNull FacetType<F, C> type, @NotNull String name,
37                                                                                    @Nullable Facet<?> underlying);
38
39   /**
40    * This method must be called when configuration of {@code facet} is changed via its API.
41    */
42   public abstract void facetConfigurationChanged(@NotNull Facet<?> facet);
43 }