/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.lang.psi.custom; import com.google.common.collect.Lists; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import gw.lang.reflect.IType; import gw.plugin.ij.util.ClassNameExtensionBean; import java.util.List; import static java.util.Collections.unmodifiableList; public enum FieldTypeResolverRegistry implements FieldTypeResolver { INSTANCE; private final ClassNameExtensionBean[] extensions = Extensions.getExtensions( new ExtensionPointName<ClassNameExtensionBean>("com.guidewire.gosu.fieldTypeResolver")); private final List<FieldTypeResolver> resolvers; private FieldTypeResolverRegistry() { List<FieldTypeResolver> resolvers = Lists.newArrayList(); for (ClassNameExtensionBean extension : extensions) { FieldTypeResolver resolver = extension.instantiate(FieldTypeResolver.class); if (resolver != null) { resolvers.add(resolver); } } this.resolvers = unmodifiableList(resolvers); } public IType resolve(IType type, String fieldName) { for (FieldTypeResolver resolver : resolvers) { IType resolvedType = resolver.resolve(type, fieldName); if (resolvedType != null) { return resolvedType; } } return null; } }