cleanup (inspection "Java | Class structure | Utility class is not 'final'")
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / incremental / TargetTypeRegistry.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 org.jetbrains.jps.incremental;
3
4 import com.intellij.openapi.diagnostic.Logger;
5 import org.jetbrains.annotations.Nullable;
6 import org.jetbrains.jps.builders.BuildTargetType;
7 import org.jetbrains.jps.service.JpsServiceManager;
8
9 import java.util.Collection;
10 import java.util.LinkedHashMap;
11 import java.util.Map;
12
13 public class TargetTypeRegistry {
14   private static final Logger LOG = Logger.getInstance(TargetTypeRegistry.class);
15   private static final class Holder {
16     static final TargetTypeRegistry ourInstance = new TargetTypeRegistry();
17   }
18   private final Map<String, BuildTargetType<?>> myTargetTypes = new LinkedHashMap<>();
19
20   public static TargetTypeRegistry getInstance() {
21     return Holder.ourInstance;
22   }
23
24   private TargetTypeRegistry() {
25     for (BuilderService service : JpsServiceManager.getInstance().getExtensions(BuilderService.class)) {
26       for (BuildTargetType<?> type : service.getTargetTypes()) {
27         String id = type.getTypeId();
28         BuildTargetType<?> old = myTargetTypes.put(id, type);
29         if (old != null) {
30           LOG.error("Two build target types (" + type + ", " + old + ") use same id (" + id + ")");
31         }
32       }
33     }
34   }
35
36   @Nullable
37   public BuildTargetType<?> getTargetType(String typeId) {
38     return myTargetTypes.get(typeId);
39   }
40
41
42   public Collection<BuildTargetType<?>> getTargetTypes() {
43     return myTargetTypes.values();
44   }
45
46 }