/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.NotNullLazyValue;
import gw.lang.GosuShop;
import gw.lang.parser.IGosuValidator;
import gw.lang.parser.ISymbol;
import gw.lang.parser.ISymbolTable;
import gw.lang.parser.ITypeUsesMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Map;
public class GosuParserConfigurer {
private static final NotNullLazyValue<IGosuParserConfigurer[]> providers = new NotNullLazyValue<IGosuParserConfigurer[]>() {
@NotNull
@Override
protected IGosuParserConfigurer[] compute() {
final GosuParserConfigurerExtensionBean[] extensions = Extensions.getExtensions(GosuParserConfigurerExtensionBean.EP_NAME);
final IGosuParserConfigurer[] providers = new IGosuParserConfigurer[extensions.length];
for (int i = 0; i < extensions.length; i++) {
providers[i] = extensions[i].getHandler();
}
return providers;
}
};
@Nullable
public static ISymbolTable getSymbolTable(AbstractGosuClassFileImpl psiFile) {
for (IGosuParserConfigurer provider : providers.getValue()) {
final ISymbolTable symbolTable = provider.getSymbolTable(psiFile);
if (symbolTable != null) {
return symbolTable;
}
}
return null;
}
@Nullable
public static ITypeUsesMap getTypeUsesMap(AbstractGosuClassFileImpl psiFile) {
for (IGosuParserConfigurer provider : providers.getValue()) {
final ITypeUsesMap typeUsesMap = provider.getTypeUsesMap(psiFile);
if (typeUsesMap != null) {
return typeUsesMap;
}
}
return null;
}
@Nullable
public static IGosuValidator getValidator(AbstractGosuClassFileImpl psiFile) {
for (IGosuParserConfigurer provider : providers.getValue()) {
final IGosuValidator validator = provider.getValidator(psiFile);
if (validator != null) {
return validator;
}
}
return null;
}
}