}
@Nullable
- public abstract <F extends Facet & FacetRootsProvider> F findFacet(VirtualFile file, FacetTypeId<F> type);
+ public abstract <F extends Facet<?> & FacetRootsProvider> F findFacet(VirtualFile file, FacetTypeId<F> type);
@NotNull
- public abstract <F extends Facet & FacetRootsProvider> Collection<F> findFacets(VirtualFile file, FacetTypeId<F> type);
+ public abstract <F extends Facet<?> & FacetRootsProvider> Collection<F> findFacets(VirtualFile file, FacetTypeId<F> type);
- public abstract <F extends Facet> ModificationTracker getAllFacetsOfTypeModificationTracker(FacetTypeId<F> type);
+ public abstract <F extends Facet<?>> ModificationTracker getAllFacetsOfTypeModificationTracker(FacetTypeId<F> type);
}
/**
* This method must be called when configuration of {@code facet} is changed via its API.
*/
- public abstract void facetConfigurationChanged(@NotNull Facet facet);
+ public abstract void facetConfigurationChanged(@NotNull Facet<?> facet);
}
return ModuleServiceManager.getService(module, FacetModificationTrackingService.class);
}
- public static FacetModificationTrackingService getInstance(@NotNull Facet facet) {
+ public static FacetModificationTrackingService getInstance(@NotNull Facet<?> facet) {
return ModuleServiceManager.getService(facet.getModule(), FacetModificationTrackingService.class);
}
@NotNull
- public abstract ModificationTracker getFacetModificationTracker(@NotNull Facet facet);
+ public abstract ModificationTracker getFacetModificationTracker(@NotNull Facet<?> facet);
- public abstract void incFacetModificationTracker(@NotNull Facet facet);
+ public abstract void incFacetModificationTracker(@NotNull Facet<?> facet);
- public abstract <T extends Facet> void addModificationTrackerListener(final T facet, final ModificationTrackerListener<? super T> listener, final Disposable parent);
+ public abstract <T extends Facet<?>> void addModificationTrackerListener(final T facet, final ModificationTrackerListener<? super T> listener, final Disposable parent);
- public abstract void removeModificationTrackerListener(final Facet facet, final ModificationTrackerListener<?> listener);
+ public abstract void removeModificationTrackerListener(final Facet<?> facet, final ModificationTrackerListener<?> listener);
}
* @deprecated register {@code facetType} as an extension instead
*/
@Deprecated
- public abstract void registerFacetType(FacetType facetType);
+ public abstract void registerFacetType(FacetType<?, ?> facetType);
/**
* @deprecated register {@code facetType} as an extension instead
*/
@Deprecated
- public abstract void unregisterFacetType(FacetType facetType);
+ public abstract void unregisterFacetType(FacetType<?, ?> facetType);
- public abstract FacetTypeId @NotNull [] getFacetTypeIds();
+ public abstract FacetTypeId<?> @NotNull [] getFacetTypeIds();
- public abstract FacetType @NotNull [] getFacetTypes();
+ public abstract FacetType<?, ?> @NotNull [] getFacetTypes();
- public abstract FacetType @NotNull [] getSortedFacetTypes();
+ public abstract FacetType<?, ?> @NotNull [] getSortedFacetTypes();
@Nullable
public abstract FacetType findFacetType(String id);
@ApiStatus.NonExtendable
public interface ModifiableFacetModel extends FacetModel {
- void addFacet(Facet facet);
- void addFacet(Facet facet, @Nullable ProjectModelExternalSource externalSource);
- void removeFacet(Facet facet);
+ void addFacet(Facet<?> facet);
+ void addFacet(Facet<?> facet, @Nullable ProjectModelExternalSource externalSource);
+ void removeFacet(Facet<?> facet);
- void rename(Facet facet, String newName);
+ void rename(Facet<?> facet, String newName);
@Nullable
- String getNewName(Facet facet);
+ String getNewName(Facet<?> facet);
void commit();
boolean isModified();
- boolean isNewFacet(Facet facet);
+ boolean isNewFacet(Facet<?> facet);
void addListener(@NotNull Listener listener, @NotNull Disposable parentDisposable);
public abstract boolean hasFacets(@NotNull FacetTypeId<?> typeId);
- public abstract <F extends Facet> List<F> getFacets(@NotNull FacetTypeId<F> typeId, final Module[] modules);
+ public abstract <F extends Facet<?>> List<F> getFacets(@NotNull FacetTypeId<F> typeId, final Module[] modules);
@NotNull
- public abstract <F extends Facet> List<F> getFacets(@NotNull FacetTypeId<F> typeId);
+ public abstract <F extends Facet<?>> List<F> getFacets(@NotNull FacetTypeId<F> typeId);
@NotNull
public abstract List<Module> getModulesWithFacet(@NotNull FacetTypeId<?> typeId);
return ServiceManager.getService(project, ProjectWideFacetListenersRegistry.class);
}
- public abstract <F extends Facet> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener);
- public abstract <F extends Facet> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener,
+ public abstract <F extends Facet<?>> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener);
+ public abstract <F extends Facet<?>> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener,
@NotNull Disposable parentDisposable);
- public abstract <F extends Facet> void unregisterListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener);
+ public abstract <F extends Facet<?>> void unregisterListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener);
public abstract void registerListener(@NotNull ProjectWideFacetListener<Facet> listener);
public abstract void unregisterListener(@NotNull ProjectWideFacetListener<Facet> listener);
}
@Override
- public void facetConfigurationChanged(@NotNull Facet facet) {
+ public void facetConfigurationChanged(@NotNull Facet<?> facet) {
getModule().getMessageBus().syncPublisher(FacetManager.FACETS_TOPIC).facetConfigurationChanged(facet);
}
}
@Override
- public <F extends Facet> ModificationTracker getAllFacetsOfTypeModificationTracker(FacetTypeId<F> type) {
+ public <F extends Facet<?>> ModificationTracker getAllFacetsOfTypeModificationTracker(FacetTypeId<F> type) {
AllFacetsOfTypeModificationTracker tracker = myAllFacetTrackers.get(type);
if (tracker == null) {
tracker = new AllFacetsOfTypeModificationTracker<>(myProject, type);
return tracker;
}
- private <F extends Facet & FacetRootsProvider> Map<VirtualFile, List<Facet>> getRootToFacetsMap(final FacetTypeId<F> type) {
+ private <F extends Facet<?> & FacetRootsProvider> Map<VirtualFile, List<Facet>> getRootToFacetsMap(final FacetTypeId<F> type) {
CachedValue<Map<VirtualFile, List<Facet>>> cachedValue = myCachedMaps.get(type);
if (cachedValue == null) {
cachedValue = myCachedValuesManager.createCachedValue(() -> {
@Override
@Nullable
- public <F extends Facet & FacetRootsProvider> F findFacet(VirtualFile file, FacetTypeId<F> type) {
+ public <F extends Facet<?> & FacetRootsProvider> F findFacet(VirtualFile file, FacetTypeId<F> type) {
final List<F> list = findFacets(file, type);
return list.size() > 0 ? list.get(0) : null;
}
@Override
@NotNull
- public <F extends Facet & FacetRootsProvider> List<F> findFacets(VirtualFile file, FacetTypeId<F> type) {
+ public <F extends Facet<?> & FacetRootsProvider> List<F> findFacets(VirtualFile file, FacetTypeId<F> type) {
final Map<VirtualFile, List<Facet>> map = getRootToFacetsMap(type);
if (!map.isEmpty()) {
while (file != null) {
- final List<F> list = (List<F>)((List)map.get(file));
+ @SuppressWarnings("unchecked")
+ List<F> list = (List<F>)((List)map.get(file));
if (list != null) {
return list;
}
@Override
@NotNull
- public String getFacetName(@NotNull Facet facet) {
+ public String getFacetName(@NotNull Facet<?> facet) {
return facet.getName();
}
public class FacetModelImpl extends FacetModelBase implements ModifiableFacetModel {
private static final Logger LOG = Logger.getInstance(FacetModelImpl.class);
- private final List<Facet> myFacets = new ArrayList<>();
- private final Map<Facet, String> myFacet2NewName = new HashMap<>();
+ private final List<Facet<?>> myFacets = new ArrayList<>();
+ private final Map<Facet<?>, String> myFacet2NewName = new HashMap<>();
private final FacetManagerImpl myManager;
private final List<Listener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
}
public void addFacetsFromManager() {
- for (Facet facet : myManager.getAllFacets()) {
+ for (Facet<?> facet : myManager.getAllFacets()) {
addFacet(facet);
}
}
@Override
- public void addFacet(Facet facet) {
+ public void addFacet(Facet<?> facet) {
if (myFacets.contains(facet)) {
LOG.error("Facet " + facet + " [" + facet.getTypeId() + "] is already added");
}
}
@Override
- public void addFacet(Facet facet, @Nullable ProjectModelExternalSource externalSource) {
+ public void addFacet(Facet<?> facet, @Nullable ProjectModelExternalSource externalSource) {
addFacet(facet);
myManager.setExternalSource(facet, externalSource);
}
@Override
- public void removeFacet(Facet facet) {
+ public void removeFacet(Facet<?> facet) {
if (!myFacets.remove(facet)) {
LOG.error("Facet " + facet + " [" + facet.getTypeId() + "] not found");
}
}
@Override
- public void rename(final Facet facet, final String newName) {
+ public void rename(final Facet<?> facet, final String newName) {
if (!newName.equals(facet.getName())) {
myFacet2NewName.put(facet, newName);
} else {
@Override
@Nullable
- public String getNewName(final Facet facet) {
+ public String getNewName(final Facet<?> facet) {
return myFacet2NewName.get(facet);
}
}
@Override
- public boolean isNewFacet(final Facet facet) {
+ public boolean isNewFacet(final Facet<?> facet) {
return myFacets.contains(facet) && ArrayUtil.find(myManager.getAllFacets(), facet) == -1;
}
@Override
- public Facet @NotNull [] getAllFacets() {
+ public Facet<?> @NotNull [] getAllFacets() {
return myFacets.toArray(Facet.EMPTY_ARRAY);
}
@Override
@NotNull
- public String getFacetName(@NotNull final Facet facet) {
+ public String getFacetName(@NotNull final Facet<?> facet) {
return myFacet2NewName.containsKey(facet) ? myFacet2NewName.get(facet) : facet.getName();
}
import java.util.concurrent.ConcurrentMap;
public class FacetModificationTrackingServiceImpl extends FacetModificationTrackingService {
- private final ConcurrentMap<Facet, Pair<SimpleModificationTracker, EventDispatcher<ModificationTrackerListener>>> myModificationsTrackers =
+ private final ConcurrentMap<Facet<?>, Pair<SimpleModificationTracker, EventDispatcher<ModificationTrackerListener>>> myModificationsTrackers =
ContainerUtil.newConcurrentMap();
public FacetModificationTrackingServiceImpl(final Module module) {
@Override
@NotNull
- public ModificationTracker getFacetModificationTracker(@NotNull final Facet facet) {
+ public ModificationTracker getFacetModificationTracker(@NotNull final Facet<?> facet) {
return getFacetInfo(facet).first;
}
- private Pair<SimpleModificationTracker, EventDispatcher<ModificationTrackerListener>> getFacetInfo(final Facet facet) {
+ private Pair<SimpleModificationTracker, EventDispatcher<ModificationTrackerListener>> getFacetInfo(final Facet<?> facet) {
Pair<SimpleModificationTracker, EventDispatcher<ModificationTrackerListener>> pair = myModificationsTrackers.get(facet);
if (pair != null) return pair;
}
@Override
- public void incFacetModificationTracker(@NotNull final Facet facet) {
+ public void incFacetModificationTracker(@NotNull final Facet<?> facet) {
final Pair<SimpleModificationTracker, EventDispatcher<ModificationTrackerListener>> pair = getFacetInfo(facet);
pair.first.incModificationCount();
//noinspection unchecked
}
@Override
- public <T extends Facet> void addModificationTrackerListener(final T facet, final ModificationTrackerListener<? super T> listener, final Disposable parent) {
+ public <T extends Facet<?>> void addModificationTrackerListener(final T facet, final ModificationTrackerListener<? super T> listener, final Disposable parent) {
getFacetInfo(facet).second.addListener(listener, parent);
}
@Override
- public void removeModificationTrackerListener(final Facet facet, final ModificationTrackerListener<?> listener) {
+ public void removeModificationTrackerListener(final Facet<?> facet, final ModificationTrackerListener<?> listener) {
getFacetInfo(facet).second.removeListener(listener);
}
public class FacetTypeRegistryImpl extends FacetTypeRegistry {
private static final Logger LOG = Logger.getInstance(FacetTypeRegistryImpl.class);
- private static final Comparator<FacetType> FACET_TYPE_COMPARATOR =
+ private static final Comparator<FacetType<?, ?>> FACET_TYPE_COMPARATOR =
(o1, o2) -> o1.getPresentableName().compareToIgnoreCase(o2.getPresentableName());
- private final Map<String, FacetTypeId> myTypeIds = new HashMap<>();
- private final Map<FacetTypeId, FacetType> myFacetTypes = new HashMap<>();
+ private final Map<String, FacetTypeId<?>> myTypeIds = new HashMap<>();
+ private final Map<FacetTypeId<?>, FacetType<?, ?>> myFacetTypes = new HashMap<>();
private boolean myExtensionsLoaded = false;
@Override
- public synchronized void registerFacetType(FacetType facetType) {
- final FacetTypeId typeId = facetType.getId();
+ public synchronized void registerFacetType(FacetType<?, ?> facetType) {
+ final FacetTypeId<?> typeId = facetType.getId();
String id = facetType.getStringId();
LOG.assertTrue(!id.contains("/"), "Facet type id '" + id + "' contains illegal character '/'");
LOG.assertTrue(!myFacetTypes.containsKey(typeId), "Facet type '" + id + "' is already registered");
}
@Override
- public synchronized void unregisterFacetType(FacetType facetType) {
- final FacetTypeId id = facetType.getId();
+ public synchronized void unregisterFacetType(FacetType<?, ?> facetType) {
+ final FacetTypeId<?> id = facetType.getId();
final String stringId = facetType.getStringId();
LOG.assertTrue(myFacetTypes.remove(id) != null, "Facet type '" + stringId + "' is not registered");
myFacetTypes.remove(id);
}
@Override
- public synchronized FacetTypeId @NotNull [] getFacetTypeIds() {
+ public synchronized FacetTypeId<?> @NotNull [] getFacetTypeIds() {
loadExtensions();
- final Set<FacetTypeId> ids = myFacetTypes.keySet();
+ final Set<FacetTypeId<?>> ids = myFacetTypes.keySet();
return ids.toArray(new FacetTypeId[0]);
}
@Override
- public synchronized FacetType @NotNull [] getFacetTypes() {
+ public synchronized FacetType<?, ?> @NotNull [] getFacetTypes() {
loadExtensions();
- final Collection<FacetType> types = myFacetTypes.values();
- final FacetType[] facetTypes = types.toArray(new FacetType[0]);
+ final Collection<FacetType<?, ?>> types = myFacetTypes.values();
+ final FacetType<?, ?>[] facetTypes = types.toArray(new FacetType[0]);
Arrays.sort(facetTypes, FACET_TYPE_COMPARATOR);
return facetTypes;
}
@Override
- public FacetType @NotNull [] getSortedFacetTypes() {
- final FacetType[] types = getFacetTypes();
+ public FacetType<?, ?> @NotNull [] getSortedFacetTypes() {
+ final FacetType<?, ?>[] types = getFacetTypes();
Arrays.sort(types, FACET_TYPE_COMPARATOR);
return types;
}
@Nullable
public synchronized FacetType findFacetType(String id) {
loadExtensions();
- final FacetTypeId typeId = myTypeIds.get(id);
+ final FacetTypeId<?> typeId = myTypeIds.get(id);
return typeId == null ? null : myFacetTypes.get(typeId);
}
@Override
public synchronized <F extends Facet<C>, C extends FacetConfiguration> FacetType<F, C> findFacetType(@NotNull FacetTypeId<F> typeId) {
loadExtensions();
- FacetType type = myFacetTypes.get(typeId);
+ @SuppressWarnings("unchecked")
+ FacetType<F, C> type = (FacetType<F, C>)myFacetTypes.get(typeId);
LOG.assertTrue(type != null, "Cannot find facet by id '" + typeId + "'");
- //noinspection unchecked
return type;
}
@NotNull
@Override
- public <F extends Facet> List<F> getFacets(@NotNull FacetTypeId<F> typeId) {
+ public <F extends Facet<?>> List<F> getFacets(@NotNull FacetTypeId<F> typeId) {
return ContainerUtil.concat(getIndex().get(typeId), module -> FacetManager.getInstance(module).getFacetsByType(typeId));
}
}
@Override
- public <F extends Facet> List<F> getFacets(@NotNull FacetTypeId<F> typeId, final Module[] modules) {
+ public <F extends Facet<?>> List<F> getFacets(@NotNull FacetTypeId<F> typeId, final Module[] modules) {
final List<F> result = new ArrayList<>();
for (Module module : modules) {
result.addAll(FacetManager.getInstance(module).getFacetsByType(typeId));
import java.util.Map;
public final class ProjectWideFacetListenersRegistryImpl extends ProjectWideFacetListenersRegistry {
- private final Map<FacetTypeId, EventDispatcher<ProjectWideFacetListener>> myDispatchers = new HashMap<>();
- private final Map<FacetTypeId, Map<Facet, Boolean>> myFacetsByType = new HashMap<>();
+ private final Map<FacetTypeId<?>, EventDispatcher<ProjectWideFacetListener>> myDispatchers = new HashMap<>();
+ private final Map<FacetTypeId<?>, Map<Facet<?>, Boolean>> myFacetsByType = new HashMap<>();
private final Map<Module, MessageBusConnection> myModule2Connection = new HashMap<>();
private final FacetManagerAdapter myFacetListener;
private final EventDispatcher<ProjectWideFacetListener> myAllFacetsListener = EventDispatcher.create(ProjectWideFacetListener.class);
@Override
public void beforeModuleRemoved(@NotNull final Project project, @NotNull final Module module) {
- Facet[] allFacets = FacetManager.getInstance(module).getAllFacets();
- for (Facet facet : allFacets) {
+ Facet<?>[] allFacets = FacetManager.getInstance(module).getAllFacets();
+ for (Facet<?> facet : allFacets) {
onFacetRemoved(facet, true);
}
}
}
final FacetManager facetManager = FacetManager.getInstance(module);
- final Facet[] facets = facetManager.getAllFacets();
- for (Facet facet : facets) {
+ final Facet<?>[] facets = facetManager.getAllFacets();
+ for (Facet<?> facet : facets) {
onFacetRemoved(facet, false);
}
}
private void onModuleAdded(final Module module) {
final FacetManager facetManager = FacetManager.getInstance(module);
- final Facet[] facets = facetManager.getAllFacets();
- for (Facet facet : facets) {
+ final Facet<?>[] facets = facetManager.getAllFacets();
+ for (Facet<?> facet : facets) {
onFacetAdded(facet);
}
final MessageBusConnection connection = module.getMessageBus().connect();
connection.subscribe(FacetManager.FACETS_TOPIC, myFacetListener);
}
- private void onFacetRemoved(@NotNull Facet facet, final boolean before) {
- final FacetTypeId typeId = facet.getTypeId();
- Map<Facet, Boolean> facets = myFacetsByType.get(typeId);
+ private void onFacetRemoved(@NotNull Facet<?> facet, final boolean before) {
+ final FacetTypeId<?> typeId = facet.getTypeId();
+ Map<Facet<?>, Boolean> facets = myFacetsByType.get(typeId);
boolean lastFacet;
if (facets != null) {
facets.remove(facet);
}
}
- private ProjectWideFacetListener<Facet> getAllFacetsMulticaster() {
+ private ProjectWideFacetListener<Facet<?>> getAllFacetsMulticaster() {
//noinspection unchecked
return myAllFacetsListener.getMulticaster();
}
- private void onFacetAdded(@NotNull Facet facet) {
+ private void onFacetAdded(@NotNull Facet<?> facet) {
boolean firstFacet = myFacetsByType.isEmpty();
- final FacetTypeId typeId = facet.getTypeId();
- Map<Facet, Boolean> facets = myFacetsByType.get(typeId);
+ final FacetTypeId<?> typeId = facet.getTypeId();
+ Map<Facet<?>, Boolean> facets = myFacetsByType.get(typeId);
if (facets == null) {
facets = ContainerUtil.createWeakMap();
myFacetsByType.put(typeId, facets);
}
}
- private void onFacetChanged(@NotNull Facet facet) {
+ private void onFacetChanged(@NotNull Facet<?> facet) {
final EventDispatcher<ProjectWideFacetListener> dispatcher = myDispatchers.get(facet.getTypeId());
if (dispatcher != null) {
//noinspection unchecked
}
@Override
- public <F extends Facet> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener) {
+ public <F extends Facet<?>> void registerListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener) {
EventDispatcher<ProjectWideFacetListener> dispatcher = myDispatchers.get(typeId);
if (dispatcher == null) {
dispatcher = EventDispatcher.create(ProjectWideFacetListener.class);
}
@Override
- public <F extends Facet> void unregisterListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener) {
+ public <F extends Facet<?>> void unregisterListener(@NotNull FacetTypeId<F> typeId, @NotNull ProjectWideFacetListener<? extends F> listener) {
final EventDispatcher<ProjectWideFacetListener> dispatcher = myDispatchers.get(typeId);
if (dispatcher != null) {
dispatcher.removeListener(listener);
}
@Override
- public <F extends Facet> void registerListener(@NotNull final FacetTypeId<F> typeId, @NotNull final ProjectWideFacetListener<? extends F> listener,
+ public <F extends Facet<?>> void registerListener(@NotNull final FacetTypeId<F> typeId, @NotNull final ProjectWideFacetListener<? extends F> listener,
@NotNull final Disposable parentDisposable) {
registerListener(typeId, listener);
Disposer.register(parentDisposable, new Disposable() {