[facets API] mark some interfaces in Facets API as NonExtendable
[idea/community.git] / platform / lang-api / src / com / intellij / facet / pointers / FacetPointersManager.java
1 // Copyright 2000-2018 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.pointers;
3
4 import com.intellij.facet.Facet;
5 import com.intellij.openapi.Disposable;
6 import com.intellij.openapi.project.Project;
7 import org.jetbrains.annotations.ApiStatus;
8 import org.jetbrains.annotations.NotNull;
9
10 @ApiStatus.NonExtendable
11 public abstract class FacetPointersManager {
12   public static FacetPointersManager getInstance(Project project) {
13     return project.getComponent(FacetPointersManager.class);
14   }
15
16   public abstract <F extends Facet> FacetPointer<F> create(F facet);
17   public abstract <F extends Facet> FacetPointer<F> create(String id);
18
19   public abstract void addListener(FacetPointerListener<Facet> listener);
20   public abstract void addListener(FacetPointerListener<Facet> listener, Disposable parentDisposable);
21   public abstract void removeListener(FacetPointerListener<Facet> listener);
22
23   public abstract <F extends Facet> void addListener(Class<F> facetClass, FacetPointerListener<F> listener);
24   public abstract <F extends Facet> void addListener(Class<F> facetClass, FacetPointerListener<F> listener, Disposable parentDisposable);
25   public abstract <F extends Facet> void removeListener(Class<F> facetClass, FacetPointerListener<F> listener);
26
27   public static String constructId(final String moduleName, final String facetTypeId, final String facetName) {
28     return moduleName + "/" + facetTypeId + "/" + facetName;
29   }
30
31   @NotNull
32   public static String constructId(@NotNull Facet facet) {
33     return constructId(facet.getModule().getName(), facet.getType().getStringId(), facet.getName());
34   }
35
36   @NotNull
37   public static String getFacetName(@NotNull String facetPointerId) {
38     return facetPointerId.substring(facetPointerId.lastIndexOf('/') + 1);
39   }
40
41   @NotNull
42   public static String getModuleName(String facetPointerId) {
43     return facetPointerId.substring(0, facetPointerId.indexOf('/'));
44   }
45
46   @NotNull
47   public static String getFacetType(@NotNull String facetPointerId) {
48     return facetPointerId.substring(facetPointerId.indexOf('/') + 1, facetPointerId.lastIndexOf('/'));
49   }
50 }