import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import java.util.SortedMap;
-import net.sourceforge.phpdt.core.IBuffer;
import net.sourceforge.phpdt.core.ICompilationUnit;
-import net.sourceforge.phpdt.core.IJavaProject;
-import net.sourceforge.phpdt.core.JavaModelException;
import net.sourceforge.phpdt.core.ToolFactory;
import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
import net.sourceforge.phpdt.core.compiler.InvalidInputException;
-import net.sourceforge.phpdt.internal.compiler.IProblemFactory;
-import net.sourceforge.phpdt.internal.compiler.SourceElementParser;
-import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
-import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory;
-import net.sourceforge.phpdt.internal.core.CompilationUnit;
-import net.sourceforge.phpdt.internal.core.CompilationUnitStructureRequestor;
-import net.sourceforge.phpdt.internal.core.JavaModelManager;
-import net.sourceforge.phpdt.internal.core.JavaProject;
-import net.sourceforge.phpdt.internal.corext.template.ContextType;
-import net.sourceforge.phpdt.internal.corext.template.ContextTypeRegistry;
-import net.sourceforge.phpdt.internal.corext.template.php.CompilationUnitContextType;
-import net.sourceforge.phpdt.internal.corext.template.php.PHPUnitContext;
+import net.sourceforge.phpdt.internal.corext.template.php.JavaContext;
+import net.sourceforge.phpdt.internal.corext.template.php.JavaContextType;
import net.sourceforge.phpdt.internal.ui.PHPUiImages;
import net.sourceforge.phpdt.internal.ui.text.java.IPHPCompletionProposal;
import net.sourceforge.phpdt.internal.ui.text.java.PHPCompletionProposalComparator;
import net.sourceforge.phpdt.internal.ui.text.template.DeclarationEngine;
import net.sourceforge.phpdt.internal.ui.text.template.IdentifierEngine;
import net.sourceforge.phpdt.internal.ui.text.template.SQLProposal;
-import net.sourceforge.phpdt.internal.ui.text.template.TemplateEngine;
+import net.sourceforge.phpdt.internal.ui.text.template.contentassist.TemplateEngine;
import net.sourceforge.phpdt.ui.IWorkingCopyManager;
-import net.sourceforge.phpeclipse.IPreferenceConstants;
import net.sourceforge.phpeclipse.PHPeclipsePlugin;
import net.sourceforge.phpeclipse.builder.IdentifierIndexManager;
-import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
-import net.sourceforge.phpeclipse.overlaypages.Util;
import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr;
+import net.sourceforge.phpeclipse.ui.IPreferenceConstants;
+import net.sourceforge.phpeclipse.ui.overlaypages.Util;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.text.contentassist.IContextInformationExtension;
import org.eclipse.jface.text.contentassist.IContextInformationPresenter;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
+import org.eclipse.jface.text.templates.TemplateContextType;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
public PHPCompletionProcessor(IEditorPart editor) {
fEditor = editor;
fManager = PHPeclipsePlugin.getDefault().getWorkingCopyManager();
- ContextType contextType = ContextTypeRegistry.getInstance().getContextType(
+ TemplateContextType contextType = PHPeclipsePlugin.getDefault().getTemplateContextRegistry().getContextType(
"php"); //$NON-NLS-1$
if (contextType != null)
fTemplateEngine = new TemplateEngine(contextType);
}
private int getLastToken(ITextViewer viewer, int completionPosition,
- PHPUnitContext context, TableName tableName) {
+ JavaContext context, TableName tableName) {
IDocument document = viewer.getDocument();
int start = context.getStart();
int end = context.getEnd();
scanner.setPHPMode(true);
int beforeLastToken = ITerminalSymbols.TokenNameEOF;
int lastToken = ITerminalSymbols.TokenNameEOF;
+ char[] ident;
try {
token = scanner.getNextToken();
lastToken = token;
while (token != ITerminalSymbols.TokenNameERROR
&& token != ITerminalSymbols.TokenNameEOF) {
beforeLastToken = lastToken;
+ if (lastToken==ITerminalSymbols.TokenNameVariable) {
+ ident = scanner.getCurrentTokenSource();
+ if (ident.length==5 &&
+ ident[0]=='$' &&
+ ident[1]=='t' &&
+ ident[2]=='h' &&
+ ident[3]=='i' &&
+ ident[4]=='s') {
+ beforeLastToken = ITerminalSymbols.TokenNamethis_PHP_COMPLETION;
+ }
+ }
lastToken = token;
// System.out.println(scanner.toStringAction(lastToken));
token = scanner.getNextToken();
private ICompletionProposal[] internalComputeCompletionProposals(
ITextViewer viewer, int offset, int contextOffset) {
-
+ ICompilationUnit unit= fManager.getWorkingCopy(fEditor.getEditorInput());
IDocument document = viewer.getDocument();
Object[] identifiers = null;
IFile file = null;
editor = (PHPEditor) fEditor;
file = ((IFileEditorInput) editor.getEditorInput()).getFile();
project = file.getProject();
- // outlinePage = editor.getfOutlinePage();
- // TODO: get the identifiers from the new model
- // if (outlinePage instanceof PHPContentOutlinePage) {
- // identifiers = ((PHPContentOutlinePage) outlinePage).getVariables();
- // }
- }
- }
-
- final ICompilationUnit unit = fManager.getWorkingCopy(fEditor
- .getEditorInput());
-
- // get buffer contents
- final IBuffer buffer;
- CompilationUnitDeclaration unitDecl=null;
- try {
- buffer = unit.getBuffer();
-
- if (project != null && buffer != null) {
-
- // final char[] contents = buffer == null ? null :
- // buffer.getCharacters();
- //
- // // generate structure and compute syntax problems if needed
- // CompilationUnitStructureRequestor requestor = new
- // CompilationUnitStructureRequestor(this, unitInfo, newElements);
- // JavaModelManager.PerWorkingCopyInfo perWorkingCopyInfo =
- // getPerWorkingCopyInfo();
- // IJavaProject project = getJavaProject();
- // boolean computeProblems =
- // JavaProject.hasJavaNature(project.getProject()) && perWorkingCopyInfo
- // != null && perWorkingCopyInfo.isActive();
- IProblemFactory problemFactory = new DefaultProblemFactory();
- // Map options = project.getOptions(true);
- SourceElementParser parser = new SourceElementParser(null,
- problemFactory, new CompilerOptions(null));
- //, true/*report local declarations*/);
- unitDecl = parser.parseCompletionUnit(
- new net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit() {
- public char[] getContents() {
- return buffer.getCharacters();
- }
-
- public char[] getMainTypeName() {
- return null;
- }
-
- public char[][] getPackageName() {
- return null;
- }
-
- public char[] getFileName() {
- return null;
- }
- }, true /* full parse to find local elements */);
-
}
-// System.out.println(unit.toString());
- } catch (Exception e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
}
-
- ContextType phpContextType = ContextTypeRegistry.getInstance()
- .getContextType("php"); //$NON-NLS-1$
- ((CompilationUnitContextType) phpContextType).setContextParameters(
- document, offset, 0);
- PHPUnitContext context = (PHPUnitContext) phpContextType.createContext();
+
+ Point selection= viewer.getSelectedRange();
+
+ // remember selected text
+ String selectedText= null;
+ if (selection.y != 0) {
+ try {
+ selectedText= document.get(selection.x, selection.y);
+ } catch (BadLocationException e) {}
+ }
+
+ JavaContextType phpContextType = (JavaContextType)PHPeclipsePlugin.getDefault().getTemplateContextRegistry().getContextType(
+ "php"); //$NON-NLS-1$
+// ((CompilationUnitContextType) phpContextType).setContextParameters(
+// document, offset, 0);
+ JavaContext context = (JavaContext) phpContextType.createContext(document, offset,selection.y,unit);
+ context.setVariable("selection", selectedText); //$NON-NLS-1$
String prefix = context.getKey();
TableName sqlTable = new TableName();
int lastSignificantToken = getLastToken(viewer, offset, context, sqlTable);
boolean useClassMembers = (lastSignificantToken == ITerminalSymbols.TokenNameMINUS_GREATER)
|| (lastSignificantToken == ITerminalSymbols.TokenNameVariable)
- || (lastSignificantToken == ITerminalSymbols.TokenNamenew);
+ || (lastSignificantToken == ITerminalSymbols.TokenNamenew)
+ || (lastSignificantToken == ITerminalSymbols.TokenNamethis_PHP_COMPLETION);
boolean emptyPrefix = prefix == null || prefix.equals("");
if (fTemplateEngine != null) {
IPHPCompletionProposal[] templateResults = new IPHPCompletionProposal[0];
ICompletionProposal[] results;
if (!emptyPrefix) {
fTemplateEngine.reset();
- fTemplateEngine.complete(viewer, offset); //, unit);
+ fTemplateEngine.complete(viewer, offset, unit);
templateResults = fTemplateEngine.getResults();
}
IPHPCompletionProposal[] identifierResults = new IPHPCompletionProposal[0];
if ((!useClassMembers) && identifiers != null) {
IdentifierEngine identifierEngine;
- ContextType contextType = ContextTypeRegistry.getInstance()
- .getContextType("php"); //$NON-NLS-1$
+ JavaContextType contextType = (JavaContextType)PHPeclipsePlugin.getDefault().getTemplateContextRegistry().getContextType(
+ "php"); //$NON-NLS-1$
if (contextType != null) {
identifierEngine = new IdentifierEngine(contextType);
- identifierEngine.complete(viewer, offset, identifiers);
+ identifierEngine.complete(viewer, offset, identifiers,unit);
identifierResults = identifierEngine.getResults();
}
}
IPHPCompletionProposal[] declarationResults = new IPHPCompletionProposal[0];
if (project != null) {
DeclarationEngine declarationEngine;
- ContextType contextType = ContextTypeRegistry.getInstance()
- .getContextType("php"); //$NON-NLS-1$
+ JavaContextType contextType = (JavaContextType)PHPeclipsePlugin.getDefault().getTemplateContextRegistry().getContextType(
+ "php"); //$NON-NLS-1$
if (contextType != null) {
IdentifierIndexManager indexManager = PHPeclipsePlugin.getDefault()
.getIndexManager(project);
SortedMap sortedMap = indexManager.getIdentifierMap();
- declarationEngine = new DeclarationEngine(contextType,
+ declarationEngine = new DeclarationEngine(project, contextType,
lastSignificantToken, file);
- declarationEngine.complete(viewer, offset, sortedMap);
+ declarationEngine.complete(viewer, offset, sortedMap,unit);
declarationResults = declarationEngine.getResults();
}
}
if ((!useClassMembers) && syntaxbuffer != null) {
BuiltInEngine builtinEngine;
String proposal;
- ContextType contextType = ContextTypeRegistry.getInstance()
- .getContextType("php"); //$NON-NLS-1$
+ JavaContextType contextType = (JavaContextType)PHPeclipsePlugin.getDefault().getTemplateContextRegistry().getContextType(
+ "php"); //$NON-NLS-1$
if (contextType != null) {
builtinEngine = new BuiltInEngine(contextType);
- builtinEngine.complete(viewer, offset, syntaxbuffer);
+ builtinEngine.complete(viewer, offset, syntaxbuffer, unit);
builtinResults = builtinEngine.getResults();
}
}