/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.completion.handlers.filter;
import com.intellij.openapi.extensions.AbstractExtensionPointBean;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.LazyInstance;
import com.intellij.util.xmlb.annotations.Attribute;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CompletionFilterExtensionPointBean extends AbstractExtensionPointBean {
public static final ExtensionPointName<CompletionFilterExtensionPointBean> EP_NAME = new ExtensionPointName<>("com.guidewire.gosu.completionFilter");
@Attribute("class")
public String className;
private final LazyInstance<CompletionFilter> filter = new LazyInstance<CompletionFilter>() {
@NotNull
protected Class<CompletionFilter> getInstanceClass() throws ClassNotFoundException {
return findClass(className);
}
};
static class FiltersHolders {
static final List<CompletionFilter> filters = getFilters();
protected static List<CompletionFilter> getFilters() {
final CompletionFilterExtensionPointBean[] extensions = Extensions.getExtensions(CompletionFilterExtensionPointBean.EP_NAME);
List<CompletionFilter> filters = new ArrayList<>(extensions.length);
for (CompletionFilterExtensionPointBean ep : extensions) {
filters.add(ep.filter.getValue());
}
return Collections.unmodifiableList(filters);
}
};
public static List<CompletionFilter> getFilters() {
return FiltersHolders.filters;
}
}