* Remove binary ast nodes * SourceElementRequestVisitor uses IElementRequestor as input requesting element.
diff --git a/plugins/org.eclipse.dltk.python.core/src/org/eclipse/dltk/python/internal/core/parser/visitors/PythonSourceElementRequestor.java b/plugins/org.eclipse.dltk.python.core/src/org/eclipse/dltk/python/internal/core/parser/visitors/PythonSourceElementRequestor.java index 6a17222..9f5b669 100644 --- a/plugins/org.eclipse.dltk.python.core/src/org/eclipse/dltk/python/internal/core/parser/visitors/PythonSourceElementRequestor.java +++ b/plugins/org.eclipse.dltk.python.core/src/org/eclipse/dltk/python/internal/core/parser/visitors/PythonSourceElementRequestor.java
@@ -52,7 +52,8 @@ private ASTNode fToNode; private ASTNode declaredIn; // The node where the declaration was found - // (should be either class or method node) + + // (should be either class or method node) TypeField(String name, String initValue, PositionInformation pos, Expression expression, ASTNode toNode, ASTNode declaredIn) { @@ -113,7 +114,7 @@ private static String ANONYMOUS_LAMBDA_FORM_MARKER = "<anonymous>"; // Used to prehold fields if adding in methods. private List fNotAddedFields = new ArrayList(); - + private String lastLambdaFormName = ANONYMOUS_LAMBDA_FORM_MARKER; /** @@ -144,8 +145,8 @@ return outValue; } - private void onVisitLambdaAssignnment(String ref, PythonLambdaExpression lambdaExpression) - { + private void onVisitLambdaAssignnment(String ref, + PythonLambdaExpression lambdaExpression) { // Declare new Method. List/* < Argument > */args = lambdaExpression.getArguments(); @@ -167,15 +168,17 @@ mi.declarationStart = lambdaExpression.sourceStart(); this.fRequestor.enterMethod(mi); -//FIXME Expression body = lambdaExpression.getBodyExpression(); -//FIXME if (body instanceof PythonLambdaExpression) -//FIXME onVisitLambdaAssignnment(ANONYMOUS_LAMBDA_FORM_MARKER,(PythonLambdaExpression)body); + // FIXME Expression body = lambdaExpression.getBodyExpression(); + // FIXME if (body instanceof PythonLambdaExpression) + // FIXME + // onVisitLambdaAssignnment(ANONYMOUS_LAMBDA_FORM_MARKER,(PythonLambdaExpression)body); this.fRequestor.exitMethod(lambdaExpression.sourceEnd()); } - private void onVisitStaticVariableAssignment(SimpleReference var, Statement val) - { + + private void onVisitStaticVariableAssignment(SimpleReference var, + Statement val) { // for module static of class static variables. - + if (canAddVariables((ASTNode) this.fNodes.peek(), var.getName())) { ISourceElementRequestor.FieldInfo info = new ISourceElementRequestor.FieldInfo(); info.modifiers = Modifiers.AccStatic; @@ -191,21 +194,21 @@ } } } - private void onVisitInstanceVariableAssignment(ExtendedVariableReference extendedVariable, Statement right) - { + + private void onVisitInstanceVariableAssignment( + ExtendedVariableReference extendedVariable, Statement right) { List varParts = extendedVariable.getExpressions(); if (extendedVariable.isDot(0)) { Expression first = (Expression) varParts.get(0); Expression second = (Expression) varParts.get(1); - if (first instanceof VariableReference && second instanceof VariableReference) { + if (first instanceof VariableReference + && second instanceof VariableReference) { String varName = ((VariableReference) first).getName(); - MethodDeclaration currentMethod = this - .getCurrentMethod(); + MethodDeclaration currentMethod = this.getCurrentMethod(); List arguments = currentMethod.getArguments(); if (arguments != null && arguments.size() > 0) { - Argument firstArgument = (Argument) arguments - .get(0); + Argument firstArgument = (Argument) arguments.get(0); String argumentName = firstArgument.getName(); if (argumentName.equals(varName)) { VariableReference var = (VariableReference) second; @@ -215,19 +218,21 @@ initialValueStart = right.sourceStart(); initialValueEnd = right.sourceEnd(); } - PositionInformation pos = new PositionInformation( - var.sourceStart(), var.sourceEnd(), + PositionInformation pos = new PositionInformation(var + .sourceStart(), var.sourceEnd(), initialValueStart, initialValueEnd); String initialString = this.makeValue(right); ASTNode method = (ASTNode) this.fNodes.pop(); ASTNode toClass = (ASTNode) this.fNodes.peek(); this.fNodes.push(method); - if (toClass instanceof TypeDeclaration) - { - List decorators = ((MethodDeclaration)method).getDecorators(); - if (null == decorators || null != decorators && decorators.size() == 0) - { - TypeField field = new TypeField(var.getName(), initialString, pos, extendedVariable, toClass, method); + if (toClass instanceof TypeDeclaration) { + List decorators = ((MethodDeclaration) method) + .getDecorators(); + if (null == decorators || null != decorators + && decorators.size() == 0) { + TypeField field = new TypeField(var.getName(), + initialString, pos, extendedVariable, + toClass, method); this.fNotAddedFields.add(field); } } @@ -236,49 +241,49 @@ } } } - private void onVisitTestListAssignment(ExpressionList left, Statement right) - { + + private void onVisitTestListAssignment(ExpressionList left, Statement right) { Iterator iter = left.getChilds().iterator(); - if (right instanceof ExpressionList) - { - ExpressionList exprs = (ExpressionList)right; + if (right instanceof ExpressionList) { + ExpressionList exprs = (ExpressionList) right; Iterator j = exprs.getChilds().iterator(); - while (iter.hasNext() && j.hasNext()) - { - Expression expr = (Expression)iter.next(); - processAssignment(expr, (Expression)j.next()); + while (iter.hasNext() && j.hasNext()) { + Expression expr = (Expression) iter.next(); + processAssignment(expr, (Expression) j.next()); } - - } - else - { - while (iter.hasNext()) - { - Expression expr = (Expression)iter.next(); + + } else { + while (iter.hasNext()) { + Expression expr = (Expression) iter.next(); processAssignment(expr, right); } } } - private void processAssignment(Statement left, Statement right) - { - if (left instanceof Assignment) - { + + private void processAssignment(Statement left, Statement right) { + if (left instanceof Assignment) { Assignment assignment = (Assignment) left; processAssignment(assignment.getLeft(), right); processAssignment(assignment.getRight(), right); - } - else if (left instanceof SimpleReference && right instanceof PythonLambdaExpression) - onVisitLambdaAssignnment(((SimpleReference)left).getName(), (PythonLambdaExpression)right); - else if (left instanceof VariableReference && !this.fInMethod) // Handle static variables - onVisitStaticVariableAssignment((VariableReference)left, right); - else if (left instanceof ExtendedVariableReference && this.fInClass && this.fInMethod) // This is for in class and in method. - onVisitInstanceVariableAssignment((ExtendedVariableReference)left, right); + } else if (left instanceof SimpleReference + && right instanceof PythonLambdaExpression) + onVisitLambdaAssignnment(((SimpleReference) left).getName(), + (PythonLambdaExpression) right); + else if (left instanceof VariableReference && !this.fInMethod) // Handle + // static + // variables + onVisitStaticVariableAssignment((VariableReference) left, right); + else if (left instanceof ExtendedVariableReference && this.fInClass + && this.fInMethod) // This is for in class and in method. + onVisitInstanceVariableAssignment((ExtendedVariableReference) left, + right); else if (left instanceof ExpressionList) - onVisitTestListAssignment((ExpressionList)left, right); + onVisitTestListAssignment((ExpressionList) left, right); else {// TODO: dynamic variable handling not yet - // supported. + // supported. } } + public boolean visit(Expression expression) throws Exception { if (expression instanceof Assignment) { @@ -293,13 +298,12 @@ } processAssignment(left, right); return false; - } - else if (expression instanceof ExtendedVariableReference) { + } else if (expression instanceof ExtendedVariableReference) { ExtendedVariableReference ref = (ExtendedVariableReference) expression; int expressionCount = ref.getExpressionCount(); for (int i = 0; i < expressionCount; i++) { Expression e = ref.getExpression(i); - if (ref.isCall(i) && e instanceof VariableReference ) { + if (ref.isCall(i) && e instanceof VariableReference) { this.fRequestor.acceptMethodReference( ((VariableReference) e).getName().toCharArray(), 0, e.sourceStart(), e.sourceEnd()); @@ -323,18 +327,16 @@ protected void onEndVisitMethod(MethodDeclaration method) { - if (fNotAddedFields.size() >= 1) - { + if (fNotAddedFields.size() >= 1) { TypeField typeField = (TypeField) fNotAddedFields.get(0); - if (null != typeField && typeField.getDeclaredIn().equals(method)) - { + if (null != typeField && typeField.getDeclaredIn().equals(method)) { Iterator i = this.fNotAddedFields.iterator(); while (i.hasNext()) { TypeField field = (TypeField) i.next(); if (canAddVariables(field.getToNode(), field.getName())) { - + PositionInformation pos = field.getPos(); - + ISourceElementRequestor.FieldInfo info = new ISourceElementRequestor.FieldInfo(); info.modifiers = Modifiers.AccStatic; info.name = field.getName(); @@ -343,7 +345,7 @@ info.declarationStart = pos.sourceStart; this.fRequestor.enterField(info); this.fRequestor.exitField(pos.sourceEnd); - + } } this.fNotAddedFields.clear(); @@ -446,7 +448,7 @@ mi.nameSourceEnd = method.getNameEnd() - 1; mi.declarationStart = method.sourceStart(); - this.fRequestor.enterMethodRemoveSame(mi); + ((ISourceElementRequestor) this.fRequestor).enterMethodRemoveSame(mi); this.fInMethod = true; this.fCurrentMethod = method;