Package org.eclipse.php.internal.core.codeassist.strategies

Source Code of org.eclipse.php.internal.core.codeassist.strategies.LocalMethodVariablesStrategyForArray

package org.eclipse.php.internal.core.codeassist.strategies;

import org.eclipse.dltk.core.*;
import org.eclipse.dltk.internal.core.ModelElement;
import org.eclipse.dltk.internal.core.SourceRange;
import org.eclipse.php.core.codeassist.ICompletionContext;
import org.eclipse.php.core.codeassist.IElementFilter;
import org.eclipse.php.core.compiler.PHPFlags;
import org.eclipse.php.internal.core.codeassist.ICompletionReporter;
import org.eclipse.php.internal.core.codeassist.contexts.ArrayKeyContext;
import org.eclipse.php.internal.core.typeinference.FakeField;
import org.eclipse.php.internal.core.typeinference.PHPModelUtils;

public class LocalMethodVariablesStrategyForArray extends
    AbstractCompletionStrategy {

  public LocalMethodVariablesStrategyForArray(ICompletionContext context,
      IElementFilter elementFilter) {
    super(context, elementFilter);
  }

  public LocalMethodVariablesStrategyForArray(ICompletionContext context) {
    super(context);
  }

  public void apply(ICompletionReporter reporter) throws Exception {
    ICompletionContext context = getContext();
    if (!(context instanceof ArrayKeyContext)) {
      return;
    }

    ArrayKeyContext arrayContext = (ArrayKeyContext) context;
    String prefix = arrayContext.getPrefix();
    CompletionRequestor requestor = arrayContext.getCompletionRequestor();
    IModelElement enclosingElement;
    try {
      enclosingElement = arrayContext.getSourceModule().getElementAt(
          arrayContext.getOffset());
      while (enclosingElement instanceof IField) {
        enclosingElement = enclosingElement.getParent();
      }
      if (!(enclosingElement instanceof IMethod)) {
        return;
      }
      SourceRange replaceRange = getReplacementRange(arrayContext);
      IMethod enclosingMethod = (IMethod) enclosingElement;

      // complete class variable: $this
      if (!PHPFlags.isStatic(enclosingMethod.getFlags())) {
        IType declaringType = enclosingMethod.getDeclaringType();
        if (declaringType != null) {
          if ("$this".startsWith(prefix)) { //$NON-NLS-1$
            reporter.reportField(
                new FakeField((ModelElement) declaringType,
                    "$this", 0, 0), "", replaceRange, false); //NON-NLS-1  //$NON-NLS-1$//$NON-NLS-2$
          }
        }
      }

      for (IModelElement element : PHPModelUtils.getMethodFields(
          enclosingMethod, prefix,
          requestor.isContextInformationMode(), null)) {
        reporter.reportField((IField) element, "", replaceRange, false); //$NON-NLS-1$
      }

    } catch (ModelException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

}
TOP

Related Classes of org.eclipse.php.internal.core.codeassist.strategies.LocalMethodVariablesStrategyForArray

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.