package fr.adrienbrault.idea.symfony2plugin.dic; import com.intellij.openapi.project.Project; import com.intellij.util.Consumer; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.Parameter; import com.jetbrains.php.lang.psi.elements.PhpClass; import fr.adrienbrault.idea.symfony2plugin.stubs.ContainerCollectionResolver; import fr.adrienbrault.idea.symfony2plugin.util.dict.ServiceUtil; import fr.adrienbrault.idea.symfony2plugin.util.yaml.visitor.ParameterVisitor; import org.jetbrains.annotations.NotNull; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class ParameterResolverConsumer implements Consumer<ParameterVisitor> { @NotNull private final Project project; @NotNull private final Consumer<Parameter> consumer; public ParameterResolverConsumer(@NotNull Project project, @NotNull Consumer<Parameter> consumer) { this.project = project; this.consumer = consumer; } @Override public void consume(ParameterVisitor parameter) { PhpClass serviceClass = ServiceUtil.getResolvedClassDefinition( this.project, parameter.getClassName(), new ContainerCollectionResolver.LazyServiceCollector(this.project) ); if(serviceClass == null) { return; } Method method = serviceClass.findMethodByName(parameter.getMethod()); if (method == null) { return; } Parameter[] methodParameter = method.getParameters(); if(parameter.getParameterIndex() >= methodParameter.length) { return; } consumer.consume(methodParameter[parameter.getParameterIndex()]); } }