Package mmrnmhrm.core.engine_client

Source Code of mmrnmhrm.core.engine_client.DeeCompletionEngine$RefSearchCompletionProposal

package mmrnmhrm.core.engine_client;

import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue;

import java.nio.file.Path;

import mmrnmhrm.core.DeeCore;
import mmrnmhrm.core.DeeCoreMessages;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.dltk.codeassist.ScriptCompletionEngine;
import org.eclipse.dltk.compiler.env.IModuleSource;
import org.eclipse.dltk.compiler.problem.DefaultProblem;
import org.eclipse.dltk.compiler.problem.ProblemSeverity;
import org.eclipse.dltk.core.CompletionContext;
import org.eclipse.dltk.core.CompletionProposal;
import org.eclipse.dltk.core.CompletionRequestor;

import dtool.ast.definitions.INamedElement;
import dtool.engine.operations.CompletionSearchResult;
import dtool.engine.operations.CompletionSearchResult.PrefixSearchOptions;

public class DeeCompletionEngine extends ScriptCompletionEngine {
 
  protected CompletionRequestor getRequestor() {
    return requestor;
  }
 
  @Override
  public void complete(IModuleSource moduleSource, final int position, int i) {
    assertNotNull(requestor);
    requestor.beginReporting();
    try {
      CompletionContext context = new CompletionContext();
      requestor.acceptContext(context);
     
      Path compilerPath = getCompilerPath(moduleSource);
      CompletionSearchResult completionResult = DToolClient.getDefault().runCodeCompletion(
        moduleSource, position, compilerPath);
      if(completionResult.isFailure()) {
        handleCompletionFailure(DeeCoreMessages.ContentAssist_LocationFailure, position);
        return;
      }
     
      for (INamedElement result : completionResult.getResults()) {
        CompletionProposal proposal = createProposal(result, position, completionResult);
        requestor.accept(proposal);
      }
     
    } catch (CoreException e) {
      DeeCore.logStatus(e);
      handleCompletionFailure(e.getMessage(), position);
    } finally {
      requestor.endReporting();
    }
  }
 
  @SuppressWarnings("unused")
  protected Path getCompilerPath(IModuleSource moduleSource) {
    return null; // Use default
  }
 
  protected void handleCompletionFailure(String errorMessage, final int position) {
    requestor.completionFailure(
      new DefaultProblem(errorMessage, null, null, ProblemSeverity.ERROR, position, position, 0));
  }
 
  protected CompletionProposal createProposal(INamedElement namedElem, int ccOffset,
      CompletionSearchResult completionResult) {
    PrefixSearchOptions searchOptions = completionResult.searchOptions;
   
    String rplName;
    if(searchOptions.isImportModuleSearch) {
      rplName = namedElem.getFullyQualifiedName();
    } else {
      rplName = namedElem.getName();
    }
   
    String rplStr = rplName.substring(searchOptions.namePrefixLen);
   
    CompletionProposal proposal = new RefSearchCompletionProposal(ccOffset, searchOptions.isImportModuleSearch);
    proposal.setName(namedElem.getExtendedName());
    proposal.setCompletion(rplStr);
    proposal.setReplaceRange(ccOffset, ccOffset + completionResult.getReplaceLength());
    proposal.setExtraInfo(namedElem);
   
    return proposal;
  }
 
  public static class RefSearchCompletionProposal extends CompletionProposal {
   
    public final boolean isModuleImportCompletion;
   
    protected RefSearchCompletionProposal(int completionLocation, boolean isModuleImportCompletion) {
      super(CompletionProposal.TYPE_REF, completionLocation);
      this.isModuleImportCompletion = isModuleImportCompletion;
    }
   
    @Override
    public void setExtraInfo(Object extraInfo) {
      assertTrue(extraInfo instanceof INamedElement);
      super.setExtraInfo(extraInfo);
    }
   
    @Override
    public INamedElement getExtraInfo() {
      return (INamedElement) super.getExtraInfo();
    }
   
    public boolean isModuleImportCompletion() {
      return isModuleImportCompletion;
    }
   
  }
 
}
TOP

Related Classes of mmrnmhrm.core.engine_client.DeeCompletionEngine$RefSearchCompletionProposal

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.