package org.maziarz.yiiclipse.completion; import java.util.Collections; import java.util.Map; import java.util.TimerTask; import java.util.Arrays; import org.eclipse.core.resources.IContainer; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.dltk.codeassist.ICompletionEngine; import org.eclipse.dltk.codeassist.ScriptCompletionEngine; import org.eclipse.dltk.compiler.env.IModuleSource; import org.eclipse.dltk.core.CompletionProposal; import org.eclipse.dltk.core.CompletionRequestor; import org.eclipse.dltk.core.IScriptProject; import org.eclipse.dltk.core.ISourceRange; import org.eclipse.php.internal.core.PHPVersion; import org.eclipse.php.internal.core.util.text.PHPTextSequenceUtilities; import org.maziarz.yiiclipse.wizards.YiiProjectWorkspaceHelper; public class YiiclipseCompletionEngine extends ScriptCompletionEngine implements ICompletionEngine { /* package */ static String POSTCOMPLETION = "POST"; public YiiclipseCompletionEngine() { } @Override public void complete(final IModuleSource module, int position, int i) { CharSequence text = module.getSourceContents(); ISourceRange range = PHPTextSequenceUtilities.getEnclosingIdentifier(text, position-1); String prefix = text.subSequence(range.getOffset(), position).toString(); if (prefix.length() > 6 && prefix.startsWith("action")) { String action = getActionViewName(prefix); CompletionProposal proposal = createProposal(CompletionProposal.POTENTIAL_METHOD_DECLARATION, position); proposal.setExtraInfo(Collections.singletonMap(POSTCOMPLETION,new Runnable() { @Override public void run() { ; } })); proposal.setName(prefix+"() - create method"); proposal.setCompletion("public function "+prefix+"() {\n\t\t$this->render('"+action+"', array());\n\t}"); proposal.setReplaceRange(range.getOffset(), position); this.requestor.accept(proposal); /*- TODO: proposal = createProposal(CompletionProposal.POTENTIAL_METHOD_DECLARATION, position); proposal.setName(prefix+"() - create method and create view file"); proposal.setCompletion("public function "+prefix+"() {\n\t\t$this->render('"+action+"', array());\n\t}"); proposal.setReplaceRange(range.getOffset(), position); proposal.setExtraInfo(Collections.singletonMap(POSTCOMPLETION,new Runnable() { @Override public void run() { YiiProjectWorkspaceHelper.INSTANCE.createFile(module.getModelElement().getScriptProject().getProject(), "file1.php"); } })); this.requestor.accept(proposal); */ } } private String getActionViewName(String prefix) { String view = prefix.replaceFirst("action", ""); String firstLetter = (new String(new char[] {view.toCharArray()[0]})).toLowerCase(); return firstLetter + new String(Arrays.copyOfRange(view.toCharArray(), 1, view.length())); } }