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