/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.intentions; import com.google.common.collect.Lists; 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.openapi.util.NotNullLazyValue; import com.intellij.util.xmlb.annotations.Attribute; import org.jetbrains.annotations.NotNull; import java.util.List; import static java.util.Collections.unmodifiableList; public class QuickFixProviderExtensionBean extends AbstractExtensionPointBean { public static final ExtensionPointName<QuickFixProviderExtensionBean> EP_NAME = new ExtensionPointName<>("com.guidewire.gosu.quickFixProvider"); @Attribute("class") public String className; private final LazyInstance<IQuickFixProvider> myHandler = new LazyInstance<IQuickFixProvider>() { @NotNull protected Class<IQuickFixProvider> getInstanceClass() throws ClassNotFoundException { return findClass(className); } }; private static NotNullLazyValue<List<IQuickFixProvider>> providers = new NotNullLazyValue<List<IQuickFixProvider>>() { @NotNull @Override protected List<IQuickFixProvider> compute() { List<IQuickFixProvider> providers = Lists.newArrayList(); for (QuickFixProviderExtensionBean extension : Extensions.getExtensions(EP_NAME)) { providers.add(extension.getHandler()); } return unmodifiableList(providers); } }; @NotNull public IQuickFixProvider getHandler() { return myHandler.getValue(); } public static List<IQuickFixProvider> getProviders() { return providers.getValue(); } }