Package com.dubture.symfony.ui.quickassist

Source Code of com.dubture.symfony.ui.quickassist.QuickAssistProcessor

/*******************************************************************************
* This file is part of the Symfony eclipse plugin.
*
* (c) Robert Gruendler <r.gruendler@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
******************************************************************************/
package com.dubture.symfony.ui.quickassist;

import java.util.Iterator;

import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext;
import org.eclipse.jface.text.quickassist.IQuickAssistProcessor;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.ui.texteditor.MarkerUtilities;
import org.eclipse.wst.sse.ui.internal.StructuredMarkerAnnotation;
import org.eclipse.wst.sse.ui.internal.StructuredResourceMarkerAnnotationModel;
import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;

import com.dubture.symfony.core.log.Logger;
import com.dubture.symfony.core.resources.SymfonyMarker;

/**
*
* Provides a "Ctrl+1" QuickAssist proposal in the XML SourceViewer.
*
* @author Robert Gruendler <r.gruendler@gmail.com>
*
*/
@SuppressWarnings("restriction")
public class QuickAssistProcessor implements IQuickAssistProcessor {

  @Override
  public String getErrorMessage() {
    return null;
  }

  @Override
  public boolean canFix(Annotation annotation) {
    return false;
  }

  @Override
  public boolean canAssist(IQuickAssistInvocationContext invocationContext) {
    return true;
  }

  @Override
  @SuppressWarnings("rawtypes")
  public ICompletionProposal[] computeQuickAssistProposals(IQuickAssistInvocationContext invocationContext) {

    if (!(invocationContext.getSourceViewer() instanceof StructuredTextViewer)) {
      return null;
    }
   
    StructuredTextViewer viewer = (StructuredTextViewer) invocationContext.getSourceViewer();

    int line = -1;

    try {
      line = viewer.getDocument().getLineOfOffset(invocationContext.getOffset());
      // the document counts 0 indexed, the marker 1 indexed
      line += 1;
    } catch (BadLocationException e1) {
      Logger.logException(e1);
    }

    if (viewer.getAnnotationModel() instanceof StructuredResourceMarkerAnnotationModel) {
     
      StructuredResourceMarkerAnnotationModel model = (StructuredResourceMarkerAnnotationModel) viewer.getAnnotationModel();
      Iterator iterator = model.getAnnotationIterator();

      while (iterator.hasNext()) {
        Object next = iterator.next();

        if (next instanceof StructuredMarkerAnnotation) {
          StructuredMarkerAnnotation annotation = (StructuredMarkerAnnotation) next;

          try {
            IMarker marker = annotation.getMarker();
            if (marker != null && SymfonyMarker.MISSING_SERVICE_CLASS.equals(marker.getType())) {
              int markerLine = MarkerUtilities.getLineNumber(marker);
              if (markerLine == line) {
                return new ICompletionProposal[] { new CreateClassCompletionProposal(marker) };
              }
            }
          } catch (CoreException e) {
            Logger.logException(e);
          }
        }
      }
    }
   
    return null;
  }
}
TOP

Related Classes of com.dubture.symfony.ui.quickassist.QuickAssistProcessor

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.