New UI for theme autodetection. Additional fixes.
[idea/community.git] / platform / lang-api / src / com / intellij / facet / ProjectWideFacetListenersRegistry.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.Disposable;
5 import com.intellij.openapi.project.Project;
6 import org.jetbrains.annotations.ApiStatus;
7 import org.jetbrains.annotations.NotNull;
8
9 /**
10  * Provides a way to register listeners which will be notified about changes in facets in all modules.
11  * Consider using {@link ProjectFacetListener} extension instead, it doesn't require calling code during project initialization.
12  */
13 @ApiStatus.NonExtendable
14 public abstract class ProjectWideFacetListenersRegistry {
15   public static ProjectWideFacetListenersRegistry getInstance(@NotNull Project project) {
16     return project.getService(ProjectWideFacetListenersRegistry.class);
17   }
18
19   public abstract <F extends Facet<?>> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener);
20   public abstract <F extends Facet<?>> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener,
21                                                           @NotNull Disposable parentDisposable);
22   public abstract <F extends Facet<?>> void unregisterListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener);
23
24   public abstract void registerListener(@NotNull ProjectWideFacetListener<Facet> listener);
25   public abstract void unregisterListener(@NotNull ProjectWideFacetListener<Facet> listener);
26   public abstract void registerListener(@NotNull ProjectWideFacetListener<Facet> listener, @NotNull Disposable parentDisposable);
27 }