/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl.resolvers;
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 gw.plugin.ij.lang.psi.api.IFeatureResolver;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class FeatureResolverExtensionBean extends AbstractExtensionPointBean {
private static final ExtensionPointName<FeatureResolverExtensionBean> EP_NAME = new ExtensionPointName<>("com.guidewire.gosu.featureResolver");
private static final NotNullLazyValue<List<IFeatureResolver>> ALL_RESOLVERS = new NotNullLazyValue<List<IFeatureResolver>>() {
@NotNull
@Override
protected List<IFeatureResolver> compute() {
final List<IFeatureResolver> result = Lists.newArrayList();
for (FeatureResolverExtensionBean bean : Extensions.getExtensions(EP_NAME)) {
result.add(bean.getHandler());
}
return result;
}
};
@Attribute("class")
public String className;
private final LazyInstance<IFeatureResolver> myHandler = new LazyInstance<IFeatureResolver>() {
@NotNull
protected Class<IFeatureResolver> getInstanceClass() throws ClassNotFoundException {
return findClass(className);
}
};
@NotNull
public IFeatureResolver getHandler() {
return myHandler.getValue();
}
@NotNull
public static List<IFeatureResolver> getResolvers() {
if (ALL_RESOLVERS.getValue().isEmpty()) {
throw new RuntimeException("There are no registered resolvers.");
}
return ALL_RESOLVERS.getValue();
}
}