anchor.diff:      print("${indent}}");
     }
   
  -
  -  
  -  visitSourceElement(SourceElement node) {
  +  visitSourceElement(analysis.SourceElement node) {
       printBlock("file: ${node.source.shortName}", (){
         node.declaredVariables.values.forEach(visit);
         node.nestedBlocks.forEach(visit);
       });
     }
   
  -  visitClassElement(ClassElement node) {
  +  visitClassElement(analysis.ClassElement node) {
       printBlock("class: ${node.name}", (){
         if (!node.declaredVariables.isEmpty){
           print("død og ødelæggelse!!!!!!!");
  
positive.code:     });
    }
  
    visitBlockElement(BlockElement node) {
      printBlock("anonBlock", (){
        node.declaredVariables.values.forEach(visit);
        node.nestedBlocks.forEach(visit);
      });
    }
  
    visitFunctionElement(FunctionElement node) {
      printBlock("anonFunction", (){
        node.declaredVariables.values.forEach(visit);
        node.nestedBlocks.forEach(visit);
      });
    }
  
    visitNamedFunctionElement(NamedFunctionElement node) {
      printBlock("func: ${node.name}", (){
        node.declaredVariables.values.forEach(visit);
        node.nestedBlocks.forEach(visit);
      });
    }
  
    visitMethodElement(MethodElement node) {
      printBlock("method: ${node.name}", (){
        node.declaredVariables.values.forEach(visit);
        node.nestedBlocks.forEach(visit);
      });
    }
  
    visitConstructorElement(ConstructorElement node) {
      printBlock("ctor: ${node.name}", (){
        node.declaredVariables.values.forEach(visit);
        node.nestedBlocks.forEach(visit);
      });
    }
  
    visitFunctionParameterElement(FunctionParameterElement node){
      print("${indent}function param ${node.name}");
    }
  
    visitParameterElement(ParameterElement node){
      print("${indent}param ${node.name}");
    }
  
    visitVariableElement(VariableElement node) {
      print("${indent}var ${node.name}");
    }
  
    visitFieldElement(FieldElement node) {
      print("${indent}field ${node.name}");
    }
  
    visitClassMember(ClassMember node){
      print("${indent}CLASS MEMBER");
    }
  
    visitLibraryElement(LibraryElement node) {
      print("${indent}CLASS MEMBER");
    }
    visitNamedElement(NamedElement node){
      print("${indent}CLASS MEMBER");
    }
    visitCallableElement(CallableElement node) {
      print("${indent}CLASS MEMBER");
    }
    visitReturnElement(ReturnElement node) {
      print("${indent}CLASS MEMBER");
    }
    visitClassAliasElement(ClassAliasElement node){
      print("${indent}CLASS MEMBER");
    }
  
    
    visitBlock(Block node){
      print("${indent}CLASS MEMBER");
    }
  }
  
  
negative.code: 
  import 'types.dart';
  import 'element.dart' as analysis;
  import 'engine.dart';
  
  class PrintResolvedIdentifiers extends CodeFormatterImpl {
  
    analysis.SourceElement currentSourceElement;
    analysis.ElementAnalysis elementAnalysis;
    Engine engine;
    
    PrintResolvedIdentifiers(Engine this.engine, analysis.ElementAnalysis this.elementAnalysis) : super(const FormatterOptions()) {
        elementAnalysis.sources.keys.forEach((Source src) {
            if (src == engine.entrySource) {
                
                var startToken = tokenize(src.contents.data); //Sets lineInfo
                var formatter = new PrintReferenceVisitor(engine, elementAnalysis, const FormatterOptions(), lineInfo, src.contents.data, null);
                elementAnalysis.getSource(src).ast.accept(formatter);
                print(formatter.writer.toString());
             }
        });      
    }
  
    FormattedSource format(CodeKind kind, String source, {int offset, int end,
        int indentationLevel: 0, Selection selection: null}) {
  
      var startToken = tokenize(source);
      checkForErrors();
  
      var node = parse(kind, startToken);
      checkForErrors();
  
      var formatter = new PrintReferenceVisitor(engine, elementAnalysis, const FormatterOptions(), lineInfo, source, selection);
      node.accept(formatter);
  
      var formattedSource = formatter.writer.toString();
  
      return new FormattedSource(formattedSource, formatter.selection);
    }
    
    
  }
  
  class PrintReferenceVisitor extends SourceVisitor {
    
    analysis.ElementAnalysis elementAnalysis;
    Engine engine;
    
    PrintReferenceVisitor(this.engine, this.elementAnalysis, options, lineInfo, source, preSelection) : super(options, lineInfo, source, preSelection) {
      
      /*
      this.writer = writer;
      //elementAnalysis.sources.values.forEach((analysis.SourceElement source) {
      analysis.SourceElement source = elementAnalysis.sources[elementAnalysis.engine.entrySource]; 
  