package fr.adrienbrault.idea.symfony2plugin.assistant.reference; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiReference; import com.jetbrains.php.lang.psi.elements.MethodReference; import com.jetbrains.php.lang.psi.elements.StringLiteralExpression; import fr.adrienbrault.idea.symfony2plugin.Settings; import fr.adrienbrault.idea.symfony2plugin.assistant.AssistantReferenceContributor; import fr.adrienbrault.idea.symfony2plugin.assistant.AssistantReferenceProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class AssistantReferenceUtil { public static String[] getReferenceProvider(Project project) { ArrayList<String> contributorAliases = new ArrayList<>(); for(AssistantReferenceProvider referenceProvider: DefaultReferenceProvider.DEFAULT_PROVIDERS) { contributorAliases.add(referenceProvider.getAlias()); } return contributorAliases.toArray(new String[contributorAliases.size()]); } public static String[] getContributorProvider(Project project) { ArrayList<String> contributorAliases = new ArrayList<>(); for(AssistantReferenceContributor assistantReferenceContributor : DefaultReferenceContributor.DEFAULT_CONTRIBUTORS) { contributorAliases.add(assistantReferenceContributor.getAlias()); } return contributorAliases.toArray(new String[contributorAliases.size()]); } @Nullable public static AssistantReferenceContributor getContributorProviderByName(Project project, String name) { for(AssistantReferenceContributor assistantReferenceContributor : DefaultReferenceContributor.DEFAULT_CONTRIBUTORS) { if(assistantReferenceContributor.getAlias().equals(name)) { return assistantReferenceContributor; } } return null; } @NotNull public static ArrayList<MethodParameterSetting> getMethodsParameterSettings(Project project) { List<MethodParameterSetting> methodParameterSettings = Settings.getInstance(project).methodParameterSettings; if(methodParameterSettings == null) { return new ArrayList<>(); } return (ArrayList<MethodParameterSetting>) methodParameterSettings; } @Nullable public static AssistantReferenceContributor getContributor(MethodParameterSetting methodParameterSetting) { for(AssistantReferenceContributor assistantReferenceContributor : DefaultReferenceContributor.DEFAULT_CONTRIBUTORS) { if(assistantReferenceContributor.getAlias().equals(methodParameterSetting.getContributorName())) { return assistantReferenceContributor; } } return null; } @NotNull public static PsiReference[] getPsiReference(MethodParameterSetting methodParameterSetting, StringLiteralExpression psiElement, List<MethodParameterSetting> configsMethodScope, MethodReference method) { // custom references if(methodParameterSetting.hasAssistantPsiReferenceContributor()) { return methodParameterSetting.getAssistantPsiReferenceContributor().getPsiReferences(psiElement); } // build provider parameter AssistantReferenceProvider.AssistantReferenceProviderParameter assistantReferenceProviderParameter = new AssistantReferenceProvider.AssistantReferenceProviderParameter( psiElement, methodParameterSetting, configsMethodScope, method ); String ReferenceProvider = methodParameterSetting.getReferenceProviderName(); for(AssistantReferenceProvider referenceProvider: DefaultReferenceProvider.DEFAULT_PROVIDERS) { if(referenceProvider.getAlias().equals(ReferenceProvider)) { return new PsiReference[] { referenceProvider.getPsiReference(assistantReferenceProviderParameter) }; } } return new PsiReference[0]; } }