/*
 * Copyright 2000-2016 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.intellij.ide.projectWizard;

import com.intellij.internal.statistic.CollectUsagesException;
import com.intellij.internal.statistic.UsagesCollector;
import com.intellij.internal.statistic.beans.GroupDescriptor;
import com.intellij.internal.statistic.beans.UsageDescriptor;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.util.containers.FactoryMap;
import com.intellij.util.containers.hash.HashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Set;

/**
 * @author Dmitry Avdeev
 */
public class ProjectCategoryUsagesCollector extends UsagesCollector {

  private final FactoryMap<String, UsageDescriptor> myUsageDescriptors = new FactoryMap<String, UsageDescriptor>() {
    @Nullable
    @Override
    protected UsageDescriptor create(String key) {
      return new UsageDescriptor(key, 0);
    }
  };

  public static void projectTypeUsed(@NotNull String projectTypeId) {
    ServiceManager.getService(ProjectCategoryUsagesCollector.class).myUsageDescriptors.get("project.category." + projectTypeId).advance();
  }

  @NotNull
  @Override
  public Set<UsageDescriptor> getUsages() throws CollectUsagesException {
    HashSet<UsageDescriptor> descriptors = new HashSet<>();
    descriptors.addAll(myUsageDescriptors.values());
    myUsageDescriptors.clear();
    return descriptors;
  }

  @NotNull
  @Override
  public GroupDescriptor getGroupId() {
    return GroupDescriptor.create("Project Category");
  }
}

@@ -1572,74 +1572,11 @@
     
-ServiceManager.getService(ProjectCategoryUsagesCollector.class).my
+get
 Usag
@@ -1587,16 +1587,18 @@
 criptors
+()
 .get(%22pr
@@ -1827,18 +1827,19 @@
 .addAll(
-my
+get
 UsageDes
@@ -1846,16 +1846,18 @@
 criptors
+()
 .values(
@@ -1864,18 +1864,19 @@
 ));%0A    
-my
+get
 UsageDes
@@ -1883,16 +1883,18 @@
 criptors
+()
 .clear()
@@ -1983,24 +1983,24 @@
 GroupId() %7B%0A
-
     return G
@@ -2045,11 +2045,188 @@
 y%22);%0A  %7D
+%0A%0A  private static FactoryMap%3CString, UsageDescriptor%3E getUsageDescriptors() %7B%0A    return ServiceManager.getService(ProjectCategoryUsagesCollector.class).myUsageDescriptors;%0A  %7D
 %0A%7D%0A

fix persisting usages