X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/DeclarationEngine.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/DeclarationEngine.java index fa9aba0..91ce5e7 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/DeclarationEngine.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/DeclarationEngine.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.SortedMap; +import net.sourceforge.phpdt.core.compiler.ITerminalSymbols; import net.sourceforge.phpdt.internal.corext.template.ContextType; import net.sourceforge.phpdt.internal.corext.template.php.CompilationUnitContextType; import net.sourceforge.phpdt.internal.corext.template.php.PHPUnitContext; @@ -15,6 +16,7 @@ import net.sourceforge.phpdt.internal.ui.text.java.IPHPCompletionProposal; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation; +import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; @@ -29,17 +31,27 @@ public class DeclarationEngine { private ContextType fContextType; /** The result proposals. */ private ArrayList fProposals = new ArrayList(); - /** Use only methods or variables inside a class*/ - private boolean fUseClassEntries; + /** Token determines last which declarations are allowed for proposal */ + private int fLastSignificantToken; + + private IFile fFile; + private String fFileName; /** * Creates the template engine for a particular context type. * See TemplateContext for supported context types. */ - public DeclarationEngine(ContextType contextType, boolean useClassEntries) { + public DeclarationEngine(ContextType contextType, int lastSignificantToken, IFile file) { // Assert.isNotNull(contextType); fContextType = contextType; - fUseClassEntries = useClassEntries; + + fLastSignificantToken = lastSignificantToken; + fFile = file; + if (fFile != null) { + fFileName = fFile.getFullPath().toString(); + } else { + fFileName = ""; + } } /** @@ -73,9 +85,10 @@ public class DeclarationEngine { return; Point selection = viewer.getSelectedRange(); + // remember selected text String selectedText = null; - + if (selection.y != 0) { try { selectedText = document.get(selection.x, selection.y); @@ -90,7 +103,7 @@ public class DeclarationEngine { int end = context.getEnd(); String prefix = context.getKey(); IRegion region = new Region(start, end - start); - + String identifier = null; SortedMap subMap = map.subMap(prefix, prefix + '\255'); @@ -105,14 +118,29 @@ public class DeclarationEngine { for (int i = 0; i < list.size(); i++) { location = (PHPIdentifierLocation) list.get(i); int type = location.getType(); - if (fUseClassEntries) { - if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) { - continue; // for loop - } - } else { - if (type == PHPIdentifierLocation.METHOD || type == PHPIdentifierLocation.VARIABLE) { - continue; // for loop - } + switch (fLastSignificantToken) { + case ITerminalSymbols.TokenNameMINUS_GREATER : + if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) { + continue; // for loop + } + break; + case ITerminalSymbols.TokenNamethis : + if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) { + continue; // for loop + } + if (!fFileName.equals(location.getFilename())) { + continue; // for loop + } + break; + case ITerminalSymbols.TokenNamenew : + if (type != PHPIdentifierLocation.CLASS && type != PHPIdentifierLocation.CONSTRUCTOR) { + continue; // for loop + } + break; + default : + if (type == PHPIdentifierLocation.METHOD || type == PHPIdentifierLocation.CONSTRUCTOR || type == PHPIdentifierLocation.VARIABLE) { + continue; // for loop + } } if (maxProposals-- < 0) { return;