Examples of VariableReference


Examples of org.eclipse.dltk.ast.references.VariableReference

  public VariableReferenceEvaluator(IGoal goal) {
    super(goal);
  }

  public IGoal[] init() {
    final VariableReference variableReference = (VariableReference) ((ExpressionTypeGoal) goal)
        .getExpression();
    IContext context = goal.getContext();
    IModelAccessCache cache = null;
    if (context instanceof IModelCacheContext) {
      cache = ((IModelCacheContext) context).getCache();
    }
    // Handle $this variable reference
    if (variableReference.getName().equals("$this")) { //$NON-NLS-1$
      if (context instanceof MethodContext) {
        MethodContext methodContext = (MethodContext) context;
        final LambdaFunctionDeclaration[] lambdas = new LambdaFunctionDeclaration[1];
        ContextFinder contextFinder = new ContextFinder(
            methodContext.getSourceModule()) {
          @Override
          public boolean visit(Expression s) throws Exception {
            if (s instanceof LambdaFunctionDeclaration) {
              LambdaFunctionDeclaration lambda = (LambdaFunctionDeclaration) s;
              if (variableReference.sourceStart() > lambda
                  .sourceStart()
                  && variableReference.sourceEnd() < lambda
                      .sourceEnd()) {
                lambdas[0] = lambda;
              }
            }
            return super.visit(s);
          }
        };
        try {
          methodContext.getRootNode().traverse(contextFinder);
        } catch (Exception e) {
        }
        PHPVersion phpVersion = ProjectOptions
            .getPhpVersion(methodContext.getSourceModule()
                .getScriptProject().getProject());
        if (lambdas[0] != null
            && (lambdas[0].isStatic() || phpVersion
                .isLessThan(PHPVersion.PHP5_4))) {
          this.results.add(new SimpleType(SimpleType.TYPE_NULL));
        } else {
          IEvaluatedType instanceType = methodContext
              .getInstanceType();
          if (instanceType != null) {
            this.results.add(instanceType);
          } else {
            this.results.add(new SimpleType(SimpleType.TYPE_NULL));
          }
        }
        return IGoal.NO_GOALS;
      }
    }

    try {
      if (context instanceof ISourceModuleContext) {
        ISourceModuleContext typedContext = (ISourceModuleContext) context;
        ASTNode rootNode = typedContext.getRootNode();
        ASTNode localScopeNode = rootNode;
        if (context instanceof MethodContext) {
          localScopeNode = ((MethodContext) context).getMethodNode();
        }
        LocalReferenceDeclSearcher varDecSearcher = new LocalReferenceDeclSearcher(
            typedContext.getSourceModule(), variableReference,
            localScopeNode);
        rootNode.traverse(varDecSearcher);
        PHPModuleDeclaration phpModule = (PHPModuleDeclaration) rootNode;
        List<IGoal> subGoals = new LinkedList<IGoal>();

        List<VarComment> varComments = phpModule.getVarComments();
        List<VarComment> newList = new ArrayList<VarComment>(phpModule
            .getVarComments().size());
        newList.addAll(varComments);
        Collections.sort(newList, new Comparator<VarComment>() {

          public int compare(VarComment o1, VarComment o2) {
            return o2.sourceStart() - o1.sourceStart();
          }
        });
        for (VarComment varComment : newList) {
          if (varComment.sourceStart() > variableReference
              .sourceStart()) {
            continue;
          }
          if (varComment.getVariableReference().getName()
              .equals(variableReference.getName())) {
            List<IGoal> goals = new LinkedList<IGoal>();
            for (TypeReference ref : varComment.getTypeReferences()) {
              goals.add(new ExpressionTypeGoal(context, ref));
            }
            return (IGoal[]) goals.toArray(new IGoal[goals.size()]);
          }
        }

        List<PHPDocBlock> docBlocks = new ArrayList<PHPDocBlock>(
            phpModule.getPhpDocBlocks().size());
        docBlocks.addAll(phpModule.getPhpDocBlocks());
        Collections.sort(docBlocks, new Comparator<PHPDocBlock>() {

          @Override
          public int compare(PHPDocBlock o1, PHPDocBlock o2) {
            return o1.sourceStart() - o1.sourceStart();
          }
        });
        for (PHPDocBlock block : docBlocks) {
          if (block.sourceStart() > variableReference.sourceStart()
              || localScopeNode.sourceStart() > block
                  .sourceStart()) {
            continue;
          }

          for (PHPDocTag tag : block.getTags(PHPDocTagKinds.VAR)) {
            String value = tag.getValue().trim();
            if (value.length() < 5 || value.charAt(0) != '$') {
              continue;
            }
            String[] split = value.split("\\s+"); //$NON-NLS-1$
            if (split.length > 1
                && split[0].equals(variableReference.getName())) {
              List<IGoal> goals = new LinkedList<IGoal>();
              for (String name : split[1].split("\\|")) { //$NON-NLS-1$
                if (name.trim().length() > 0) {
                  goals.add(new ExpressionTypeGoal(context,
                      new TypeReference(
                          tag.sourceStart(), tag
                              .sourceEnd(), name
                              .trim())));
                }
              }
              return (IGoal[]) goals.toArray(new IGoal[goals
                  .size()]);
            }
          }
        }

        Declaration[] decls = varDecSearcher.getDeclarations();
        boolean mergeWithGlobalScope = false;
        for (int i = 0; i < decls.length; ++i) {
          Declaration decl = decls[i];
          // TODO check ArrayCreation and its element type
          if (decl instanceof ArrayDeclaration) {
            ArrayDeclaration arrayDeclaration = (ArrayDeclaration) decl;
            subGoals.add(new ArrayDeclarationGoal(context,
                arrayDeclaration));
          } else if (decl.getNode() instanceof GlobalStatement) {
            mergeWithGlobalScope = true;
          } else {
            ASTNode declNode = decl.getNode();
            if (declNode instanceof ForEachStatement) {
              subGoals.add(new ForeachStatementGoal(context,
                  ((ForEachStatement) declNode)
                      .getExpression()));
            } else {
              subGoals.add(new ExpressionTypeGoal(context,
                  declNode));
            }
          }
        }
        if (mergeWithGlobalScope
            || (decls.length == 0 && context.getClass() == FileContext.class)) {
          // collect all global variables, and merge results with
          // existing declarations
          subGoals.add(new GlobalVariableReferencesGoal(context,
              variableReference.getName()));
        }
        return subGoals.toArray(new IGoal[subGoals.size()]);
      }
    } catch (Exception e) {
      if (DLTKCore.DEBUG) {
View Full Code Here

Examples of org.eclipse.dltk.ast.references.VariableReference

    protected void postProcess(Expression node) {
      if (node instanceof InstanceOfExpression) {
        InstanceOfExpression expr = (InstanceOfExpression) node;
        if (expr.getExpr() instanceof VariableReference) {
          VariableReference varReference = (VariableReference) expr
              .getExpr();
          if (variableName.equals(varReference.getName())) {
            getScope().addDeclaration(variableName,
                expr.getClassName());
          }
        }
      }
View Full Code Here

Examples of org.eclipse.dltk.ast.references.VariableReference

            .getName(), ref.sourceStart(), ref.sourceEnd(), ref
            .sourceStart(), ref.sourceEnd());
        locator.match(decl, getNodeSet());
      }
    } else if (node instanceof CatchClause) {
      VariableReference ref = ((CatchClause) node).getVariable();
      FieldDeclaration decl = new FieldDeclarationLocation(ref.getName(),
          ref.sourceStart(), ref.sourceEnd(), node.sourceStart(),
          node.sourceEnd());
      locator.match(decl, getNodeSet());
    }
  }
View Full Code Here

Examples of org.eclipse.dltk.ast.references.VariableReference

        }
        typeReferences.add(new TypeReference(typeStart, typeEnd,
            typeName));
      }

      VariableReference varReference = new VariableReference(varStart,
          varEnd, varName);
      VarComment varComment = new VarComment(start, end, varReference,
          (TypeReference[]) typeReferences
              .toArray(new TypeReference[typeReferences.size()]));
      return varComment;
View Full Code Here

Examples of org.eclipse.dltk.ast.references.VariableReference

              firstWordEnd);
          String secondWord = value.substring(secondWordStart,
              secondWordEnd);
          if (firstWord.charAt(0) == '$') {
            references = new SimpleReference[2];
            references[0] = new VariableReference(valueStart
                + firstWordStart, valueStart + firstWordEnd,
                firstWord);
            references[1] = new TypeReference(valueStart
                + secondWordStart, valueStart + secondWordEnd,
                secondWord);
            referencesWithOrigOrder = references;
          } else if (secondWord.charAt(0) == '$') {
            references = new SimpleReference[2];
            references[0] = new VariableReference(valueStart
                + secondWordStart, valueStart + secondWordEnd,
                secondWord);
            references[1] = new TypeReference(valueStart
                + firstWordStart, valueStart + firstWordEnd,
                firstWord);
View Full Code Here

Examples of org.eclipse.dltk.ast.references.VariableReference

    protected void postProcess(Expression node) {
      if (node instanceof Assignment) {
        Expression variable = ((Assignment) node).getVariable();
        if (variable instanceof VariableReference) {
          VariableReference variableReference = (VariableReference) variable;
          if (variableName.equals(variableReference.getName())) {
            setNextRange();
          }
        }
      }
    }
View Full Code Here

Examples of org.jboss.errai.codegen.VariableReference

    }

    final String currCallString = writer.getCallString();
    writer.reset();

    statement = new VariableReference() {

      @Override
      public String getName() {
        return field.getName();
      }
View Full Code Here

Examples of org.jboss.errai.codegen.VariableReference

/**
* @author Mike Brock <cbrock@redhat.com>
*/
public abstract class Refs {
  public static VariableReference get(final String name, final MetaClass type) {
    return new VariableReference() {
      @Override
      public String getName() {
        return name;
      }

View Full Code Here

Examples of org.jboss.errai.codegen.VariableReference

      }
    };
  }

  public static VariableReference get(final String name) {
    return new VariableReference() {
      private MetaClass type;

      @Override
      public String getName() {
        return name;
      }

      @Override
      public Statement getValue() {
        return new Statement() {

          String generatedCache;

          @Override
          public String generate(final Context context) {
            if (generatedCache != null) return generatedCache;

            final VariableReference var = context.getVariable(name);

            if (var == null) {
              throw new OutOfScopeException("could not access variable: " + name);
            }

            type = var.getType();

            return generatedCache = name;
          }

          @Override
View Full Code Here

Examples of org.jboss.errai.codegen.VariableReference

      final Statement[] idx = new Statement[this.indexes.length];
      for (int i = 0; i < idx.length; i++) {
        idx[i] = GenUtil.convert(context, GenUtil.generate(context, this.indexes[i]), MetaClassFactory.get(Integer.class));
      }
 
      final VariableReference ref = context.getVariable(variableName);
 
      if (idx.length > 0) {
        if (!ref.getType().isArray()) {
          throw new InvalidTypeException("attempt to use indexed accessor on non-array type: " + ref);
        }
      }
 
      final Statement stmt = new VariableReference() {
        @Override
        public String getName() {
          return ref.getName();
        }
 
View Full Code Here
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.