/******************************************************************************* * This file is part of the Symfony eclipse plugin. * * (c) Robert Gruendler <r.gruendler@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. ******************************************************************************/ package com.dubture.symfony.twig.codeassist.strategies; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.eclipse.dltk.core.ISourceRange; import org.eclipse.dltk.core.IType; import org.eclipse.jface.text.BadLocationException; import com.dubture.symfony.core.codeassist.contexts.RouteCompletionContext; import com.dubture.symfony.core.model.SymfonyModelAccess; import com.dubture.symfony.index.model.Route; import com.dubture.symfony.twig.codeassist.CompletionProposalFlag; import com.dubture.twig.core.codeassist.ICompletionContext; import com.dubture.twig.core.codeassist.ICompletionProposalFlag; import com.dubture.twig.core.codeassist.ICompletionReporter; import com.dubture.twig.core.codeassist.context.AbstractTwigCompletionContext; import com.dubture.twig.core.codeassist.strategies.AbstractTwigCompletionStrategy; /** * Completes route names inside a {@link RouteCompletionContext} * @author Robert Gruendler <r.gruendler@gmail.com> */ public class RouteCompletionStrategy extends AbstractTwigCompletionStrategy { public static int workaroundCount = 0; public RouteCompletionStrategy(ICompletionContext context) { super(context); } @Override public void apply(ICompletionReporter reporter) throws BadLocationException { AbstractTwigCompletionContext context = (AbstractTwigCompletionContext) getContext(); //TODO: this needs caching!!! List<Route> routes = SymfonyModelAccess.getDefault().findRoutes(context.getScriptProject()); ISourceRange range = getReplacementRange(context); SymfonyModelAccess model = SymfonyModelAccess.getDefault(); String prefix = context.getPrefix(); for (Route route : routes) { IType controller = model.findController(route.bundle, route.controller, context.getScriptProject()); if (controller == null) { continue; } if (StringUtils.startsWithIgnoreCase(route.name, prefix)) { reporter.reportKeyword(route.name, range, new ICompletionProposalFlag[]{CompletionProposalFlag.ROUTE}); } } } }