Package org.pdtextensions.semanticanalysis.ui.contentassist

Source Code of org.pdtextensions.semanticanalysis.ui.contentassist.InjectUseStatementCompletionProposal

package org.pdtextensions.semanticanalysis.ui.contentassist;

import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.dltk.core.ICodeAssist;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IType;
import org.eclipse.dltk.core.index2.search.ISearchEngine.MatchRule;
import org.eclipse.dltk.core.search.IDLTKSearchScope;
import org.eclipse.dltk.core.search.SearchEngine;
import org.eclipse.dltk.internal.ui.editor.EditorUtility;
import org.eclipse.dltk.ui.DLTKPluginImages;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.php.internal.core.model.PhpModelAccess;
import org.eclipse.php.internal.ui.editor.PHPStructuredEditor;
import org.eclipse.php.internal.ui.editor.PHPStructuredTextViewer;
import org.eclipse.php.internal.ui.editor.contentassist.PHPCompletionProposal;
import org.eclipse.php.internal.ui.editor.contentassist.UseStatementInjector;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.pdtextensions.core.log.Logger;

@SuppressWarnings("restriction")
public class InjectUseStatementCompletionProposal extends PHPCompletionProposal {

  private IType type = null;
 
  public InjectUseStatementCompletionProposal(String replacementString,
      int replacementOffset, int replacementLength, Image image,
      String displayString, int relevance) {
    super(replacementString, replacementOffset, replacementLength, image,
        displayString, relevance);
  }
 
  public Image getImage() {
 
    return DLTKPluginImages.get(DLTKPluginImages.IMG_OBJS_IMPDECL);
 
  }
 
  @Override
  public void apply(ITextViewer viewer, char trigger, int stateMask,
      int offset) {

   
    IDocument document = viewer.getDocument();
    PHPStructuredEditor textEditor = (PHPStructuredEditor) ((PHPStructuredTextViewer) viewer)
        .getTextEditor();

    if (textEditor instanceof PHPStructuredEditor) {
      IModelElement editorElement = ((PHPStructuredEditor) textEditor)
          .getModelElement();
      if (editorElement != null) {

        IModelElement input = EditorUtility.getEditorInputModelElement(textEditor, false);

        if (input instanceof ICodeAssist) {
         
          try {
           
            int repOffset = getReplacementOffset();
            int length = getReplacementLength();
            IDLTKSearchScope scope = SearchEngine.createSearchScope(input.getScriptProject());
            String type = document.get(repOffset, length);
            IType[] types = PhpModelAccess.getDefault().findTypes(null, type, MatchRule.EXACT, 0, 0, scope, new NullProgressMonitor());
           
            if (types.length == 1) {
              this.type = types[0];
              UseStatementInjector injector = new UseStatementInjector(this);
              injector.inject(document, viewer, offset);
            } else if (types.length > 1) {
             
              Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
             
              ElementListSelectionDialog dialog = new ElementListSelectionDialog(shell, new TypeLabelProvider());
              dialog.setElements(types);
             
              if (dialog.open() == Window.OK) {
               
                Object[] result = dialog.getResult();
               
                if (result != null && result.length == 1) {
                  this.type = (IType) result[0];
                  UseStatementInjector injector = new UseStatementInjector(this);
                  injector.inject(document, viewer, offset);
                }
              }
            }
           
          } catch (BadLocationException e) {
            Logger.logException(e);
          }
        }
      }
    }
  }
 
  public IModelElement getModelElement() {

    return type;
   
  };
 
  private static class TypeLabelProvider extends LabelProvider {

    @Override
    public String getText(Object element) {
     
      if (element instanceof IType) {
        return ((IType)element).getFullyQualifiedName("\\");
      }
      return super.getText(element);
    }
   
    @Override
    public Image getImage(Object element) {
      return DLTKPluginImages.get(DLTKPluginImages.IMG_OBJS_CLASS);
    }
  }
}
TOP

Related Classes of org.pdtextensions.semanticanalysis.ui.contentassist.InjectUseStatementCompletionProposal

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.