Source:
public void endVisit(LambdaExpression node) { fCurrentMethodsAndLambdas.pop(); final IMethodBinding binding= node.resolveMethodBinding(); if (binding != null) { ASTNode body= node.getBody(); if (body instanceof Expression) { Expression expression= (Expression) body; final ConstraintVariable2 descendant= (ConstraintVariable2) expression.getProperty(PROPERTY_CONSTRAINT_VARIABLE); if (descendant != null) { final ConstraintVariable2 ancestor= fModel.createReturnTypeVariable(binding); if (ancestor != null) { node.setProperty(PROPERTY_CONSTRAINT_VARIABLE, ancestor); fModel.createSubtypeConstraint(descendant, ancestor); } } } endVisit(binding); ConstraintVariable2 ancestor= null; ConstraintVariable2 descendant= null; IVariableBinding variable= null; final List<VariableDeclaration> parameters= node.parameters(); if (!parameters.isEmpty()) { final Collection<IMethodBinding> originals= getOriginalMethods(binding); VariableDeclaration declaration= null; for (int index= 0; index < parameters.size(); index++) { declaration= parameters.get(index); ancestor= fModel.createMethodParameterVariable(binding, index); if (ancestor != null) { variable= declaration.resolveBinding(); if (variable != null) { descendant= fModel.createVariableVariable(variable); if (descendant != null) fModel.createEqualityConstraint(ancestor, descendant); } IMethodBinding method= null; for (final Iterator<IMethodBinding> iterator= originals.iterator(); iterator.hasNext();) { method= iterator.next(); if (!method.getKey().equals(binding.getKey())) { descendant= fModel.createMethodParameterVariable(method, index); if (descendant != null) fModel.createEqualityConstraint(ancestor, descendant); } } } } } } }

Target:
public void endVisit(LambdaExpression node) { fCurrentMethodsAndLambdas.pop(); final IMethodBinding binding= node.resolveMethodBinding(); if (binding != null) { ASTNode body= node.getBody(); if (body instanceof Expression) { Expression expression= (Expression) body; final ConstraintVariable2 descendant= (ConstraintVariable2) expression.getProperty(PROPERTY_CONSTRAINT_VARIABLE); if (descendant != null) { final ConstraintVariable2 ancestor= fModel.createReturnTypeVariable(binding); if (ancestor != null) { fModel.createSubtypeConstraint(descendant, ancestor); } } } endVisit(binding); ConstraintVariable2 ancestor= null; ConstraintVariable2 descendant= null; IVariableBinding variable= null; final List<VariableDeclaration> parameters= node.parameters(); if (!parameters.isEmpty()) { final Collection<IMethodBinding> originals= getOriginalMethods(binding); VariableDeclaration declaration= null; for (int index= 0; index < parameters.size(); index++) { declaration= parameters.get(index); ancestor= fModel.createMethodParameterVariable(binding, index); if (ancestor != null) { if(declaration instanceof SingleVariableDeclaration) { descendant= (ConstraintVariable2) ((SingleVariableDeclaration)declaration).getType().getProperty(PROPERTY_CONSTRAINT_VARIABLE); if (descendant != null) fModel.createEqualityConstraint(descendant, ancestor); } variable= declaration.resolveBinding(); if (variable != null) { descendant= fModel.createVariableVariable(variable); if (descendant != null) fModel.createEqualityConstraint(ancestor, descendant); } IMethodBinding method= null; for (final Iterator<IMethodBinding> iterator= originals.iterator(); iterator.hasNext();) { method= iterator.next(); if (!method.getKey().equals(binding.getKey())) { descendant= fModel.createMethodParameterVariable(method, index); if (descendant != null) fModel.createEqualityConstraint(ancestor, descendant); } } } } } } }