Contributors:
IBM Corporation - Initial implementation
- Klaus Hartlage - www.eclipseproject.de
**********************************************************************/
package net.sourceforge.phpeclipse.phpeditor.php;
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();
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();
- // }
}
}
- 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);
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(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();
}
}
IPHPCompletionProposal[] sqlResults = new IPHPCompletionProposal[0];
if (project != null) {
- // Get The Database bookmark from the Quantum SQL plugin:
- BookmarkCollection sqlBookMarks = BookmarkCollection.getInstance();
- if (sqlBookMarks != null) {
- String bookmarkString = Util.getMiscProjectsPreferenceValue(project,
- IPreferenceConstants.PHP_BOOKMARK_DEFAULT);
- if (bookmarkString != null && !bookmarkString.equals("")) {
- Bookmark bookmark = sqlBookMarks.find(bookmarkString);
- ArrayList sqlList = new ArrayList();
- if (bookmark != null && !bookmark.isConnected()) {
- new ConnectionUtil().connect(bookmark, null);
- }
- if (bookmark != null && bookmark.isConnected()) {
- try {
- Connection connection = bookmark.getConnection();
- DatabaseMetaData metaData = connection.getMetaData();
-
- if (metaData != null) {
- int start = context.getStart();
- int end = context.getEnd();
- String foundSQLTableName = sqlTable.getTableName();
- String tableName;
- String columnName;
- String prefixWithoutDollar = prefix;
- boolean isDollarPrefix = false;
- if (prefix.length() > 0 && prefix.charAt(0) == '$') {
- prefixWithoutDollar = prefix.substring(1);
- isDollarPrefix = true;
- }
- IRegion region = new Region(start, end - start);
- ResultSet set;
- if (!isDollarPrefix) {
- set = metaData.getTables(null, null, prefixWithoutDollar
- + "%", null);
- while (set.next()) {
- // String tempSchema = set.getString("TABLE_SCHEM");
- // tempSchema = (tempSchema == null) ? "" :
- // tempSchema.trim();
- tableName = set.getString("TABLE_NAME");
- tableName = (tableName == null) ? "" : tableName.trim();
- if (tableName != null && tableName.length() > 0) {
- sqlList.add(new SQLProposal(tableName, context, region,
- viewer, PHPUiImages.get(PHPUiImages.IMG_TABLE)));
- }
- }
- set.close();
- }
- set = metaData.getColumns(null, null, "%",
- prefixWithoutDollar + "%");
- SQLProposal sqlProposal;
- while (set.next()) {
- columnName = set.getString("COLUMN_NAME");
- columnName = (columnName == null) ? "" : columnName.trim();
- tableName = set.getString("TABLE_NAME");
- tableName = (tableName == null) ? "" : tableName.trim();
- if (tableName != null && tableName.length() > 0
- && columnName != null && columnName.length() > 0) {
- if (isDollarPrefix) {
- sqlProposal = new SQLProposal(tableName, "$"
- + columnName, context, region, viewer, PHPUiImages
- .get(PHPUiImages.IMG_COLUMN));
- } else {
- sqlProposal = new SQLProposal(tableName, columnName,
- context, region, viewer, PHPUiImages
- .get(PHPUiImages.IMG_COLUMN));
- }
- if (tableName.equals(foundSQLTableName)) {
- sqlProposal.setRelevance(90);
- } else if (tableName.indexOf(foundSQLTableName) >= 0) {
- sqlProposal.setRelevance(75);
- }
- sqlList.add(sqlProposal);
- }
- }
- set.close();
- sqlResults = new IPHPCompletionProposal[sqlList.size()];
- for (int i = 0; i < sqlList.size(); i++) {
- sqlResults[i] = (SQLProposal) sqlList.get(i);
- }
- }
- } catch (NotConnectedException e) {
- // ignore this - not mission critical
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
+ sqlResults = getSQLProposals(viewer, project, context, prefix, sqlTable, sqlResults);
}
// concatenate the result arrays
IPHPCompletionProposal[] total;
return new IPHPCompletionProposal[0];
}
+ /**
+ * @param viewer
+ * @param project
+ * @param context
+ * @param prefix
+ * @param sqlTable
+ * @param sqlResults
+ * @return
+ */
+ private IPHPCompletionProposal[] getSQLProposals(ITextViewer viewer, IProject project, JavaContext context, String prefix, TableName sqlTable, IPHPCompletionProposal[] sqlResults) {
+ // Get The Database bookmark from the Quantum SQL plugin:
+ BookmarkCollection sqlBookMarks = BookmarkCollection.getInstance();
+ if (sqlBookMarks != null) {
+ String bookmarkString = Util.getMiscProjectsPreferenceValue(project,
+ IPreferenceConstants.PHP_BOOKMARK_DEFAULT);
+ if (bookmarkString != null && !bookmarkString.equals("")) {
+ Bookmark bookmark = sqlBookMarks.find(bookmarkString);
+ ArrayList sqlList = new ArrayList();
+ if (bookmark != null && !bookmark.isConnected()) {
+ new ConnectionUtil().connect(bookmark, null);
+ }
+ if (bookmark != null && bookmark.isConnected()) {
+ try {
+ Connection connection = bookmark.getConnection();
+ DatabaseMetaData metaData = connection.getMetaData();
+
+ if (metaData != null) {
+ int start = context.getStart();
+ int end = context.getEnd();
+ String foundSQLTableName = sqlTable.getTableName();
+ String tableName;
+ String columnName;
+ String prefixWithoutDollar = prefix;
+ boolean isDollarPrefix = false;
+ if (prefix.length() > 0 && prefix.charAt(0) == '$') {
+ prefixWithoutDollar = prefix.substring(1);
+ isDollarPrefix = true;
+ }
+ IRegion region = new Region(start, end - start);
+ ResultSet set;
+ if (!isDollarPrefix) {
+ set = metaData.getTables(null, null, prefixWithoutDollar
+ + "%", null);
+ while (set.next()) {
+ // String tempSchema = set.getString("TABLE_SCHEM");
+ // tempSchema = (tempSchema == null) ? "" :
+ // tempSchema.trim();
+ tableName = set.getString("TABLE_NAME");
+ tableName = (tableName == null) ? "" : tableName.trim();
+ if (tableName != null && tableName.length() > 0) {
+ sqlList.add(new SQLProposal(tableName, context, region,
+ viewer, PHPUiImages.get(PHPUiImages.IMG_TABLE)));
+ }
+ }
+ set.close();
+ }
+ set = metaData.getColumns(null, null, "%",
+ prefixWithoutDollar + "%");
+ SQLProposal sqlProposal;
+ while (set.next()) {
+ columnName = set.getString("COLUMN_NAME");
+ columnName = (columnName == null) ? "" : columnName.trim();
+ tableName = set.getString("TABLE_NAME");
+ tableName = (tableName == null) ? "" : tableName.trim();
+ if (tableName != null && tableName.length() > 0
+ && columnName != null && columnName.length() > 0) {
+ if (isDollarPrefix) {
+ sqlProposal = new SQLProposal(tableName, "$"
+ + columnName, context, region, viewer, PHPUiImages
+ .get(PHPUiImages.IMG_COLUMN));
+ } else {
+ sqlProposal = new SQLProposal(tableName, columnName,
+ context, region, viewer, PHPUiImages
+ .get(PHPUiImages.IMG_COLUMN));
+ }
+ if (tableName.equals(foundSQLTableName)) {
+ sqlProposal.setRelevance(90);
+ } else if (tableName.indexOf(foundSQLTableName) >= 0) {
+ sqlProposal.setRelevance(75);
+ }
+ sqlList.add(sqlProposal);
+ }
+ }
+ set.close();
+ sqlResults = new IPHPCompletionProposal[sqlList.size()];
+ for (int i = 0; i < sqlList.size(); i++) {
+ sqlResults[i] = (SQLProposal) sqlList.get(i);
+ }
+ }
+ } catch (NotConnectedException e) {
+ // ignore this - not mission critical
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ return sqlResults;
+ }
+
private int guessContextInformationPosition(ITextViewer viewer, int offset) {
int contextPosition = offset;
IDocument document = viewer.getDocument();