private void selectionOnVariable(ModuleDeclaration parsedUnit, VariableReference e) { String name = e.getName(); if (name.startsWith("@")) { // $NON-NLS-1$ IField[] fields = RubyModelUtils.findFields(mixinModel, sourceModule, parsedUnit, name, e.sourceStart()); addArrayToCollection(fields, selectionElements); } else { /* * local vars (legacy, saved for speed reasons: we don't need to use * mixin model for local vars) */ ASTNode parentScope = null; for (int i = wayToNode.length; --i >= 0; ) { final ASTNode node = wayToNode[i]; if (node instanceof MethodDeclaration || node instanceof TypeDeclaration || node instanceof ModuleDeclaration || node instanceof RubyForStatement2) { parentScope = node; break; } } if (parentScope != null) { RubyAssignment[] assignments = RubyTypeInferencingUtils.findLocalVariableAssignments(parentScope, e, name); if (assignments.length > 0) { final ASTNode left = assignments[0].getLeft(); selectionElements.add(createLocalVariable(name, left.sourceStart(), left.sourceEnd())); } else { selectionElements.add(createLocalVariable(name, e.sourceStart(), e.sourceEnd())); } } } }
private void handleVariableReference(VariableReference ref) { final String varName = ref.getName(); if (varName.length() != 0) { if (varName.charAt(0) == '$') { requestor.addPosition(ref.sourceStart(), ref.sourceEnd(), HL_GLOBAL_VARIABLE); } else if (varName.charAt(0) == '@') { if (varName.length() > 2 && varName.charAt(1) == '@') { requestor.addPosition(ref.sourceStart(), ref.sourceEnd(), HL_CLASS_VARIABLE); } else { requestor.addPosition(ref.sourceStart(), ref.sourceEnd(), HL_INSTANCE_VARIABLE); } } else { requestor.addPosition(ref.sourceStart(), ref.sourceEnd(), HL_LOCAL_VARIABLE); } } }