>>>
class
A
{
}
<<<
class A {
}
>>> dartbug.com/15876
// fisk
import "dart:typed_data";

main() {
  ByteData byteData = new ByteData(1);
  print(byteData is ByteData);
  print(byteData.elementSizeInBytes);
}
<<<
// fisk
import "dart:typed_data";

main() {
  ByteData byteData = new ByteData(1);
  print(byteData is ByteData);
  print(byteData.elementSizeInBytes);
}
>>>
/**
 * Y.
 */
abstract class Y = Foo with Bar;
<<<
/**
 * Y.
 */
abstract class Y = Foo with Bar;
>>>
external void printToConsole(String line);
<<<
external void printToConsole(String line);
>>>
void set foo(int bar) {
}

int get baz => null;
<<<
void set foo(int bar) {
}

int get baz => null;
>>>
@deprecated
library foo;

@deprecated
import 'dart:io';

@deprecated
export 'dart:io';

class NoInline {
  const NoInline();
}

@NoInline()
int foo(@NoInline() bar) => bar + 42;

class Z<@NoInline() Y> {

}

@NoInline()
typedef void X(y);

@NoInline()
class Y = X with Z;

@NoInline()
class X {

  @NoInline()
  var _x;

  @NoInline()
  X.y() {
    @NoInline()
    const y = null;
  }

  @NoInline()
  factory X(@NoInline() x) => null;

  @NoInline()
  int x() => null;
}
<<<
@deprecated
library foo;

@deprecated
import 'dart:io';

@deprecated
export 'dart:io';

class NoInline {
  const NoInline();
}

@NoInline()
int foo(@NoInline() bar) => bar + 42;

class Z<@NoInline() Y> {

}

@NoInline()
typedef void X(y);

@NoInline()
class Y = X with Z;

@NoInline()
class X {

  @NoInline()
  var _x;

  @NoInline()
  X.y() {
    @NoInline()
    const y = null;
  }

  @NoInline()
  factory X(@NoInline() x) => null;

  @NoInline()
  int x() => null;
}
>>>
var x = #foo;
var y=#foo.bar.baz;
<<<
var x = #foo;
var y = #foo.bar.baz;
>>>
class Zounds extends Object native "Zapp" {
}
<<<
class Zounds extends Object native "Zapp" {
}
>>>
@DomName('DatabaseCallback')
@Experimental() // deprecated
typedef void DatabaseCallback(database);
<<<
@DomName('DatabaseCallback')
@Experimental() // deprecated
typedef void DatabaseCallback(database);
>>> dartbug.com/16366
import 'package:sdasdsasadasd/ass/sadasdas/sadasdsad_asdasd_asdsada_adsasdasdsa.dart';
<<<
import 'package:sdasdsasadasd/ass/sadasdas/sadasdsad_asdasd_asdsada_adsasdasdsa.dart';
>>>
import 'package:sdasdsasadasd/ass/sadasdas/sadasdsad_asdasd_asdsada_adsasdasdsa.dart' as sass;
<<<
import 'package:sdasdsasadasd/ass/sadasdas/sadasdsad_asdasd_asdsada_adsasdasdsa.dart'
    as sass;
>>> dartbug.com/15912
abstract class ListBase<E> = Object with ListMixin<E>;
<<<
abstract class ListBase<E> = Object with ListMixin<E>;
>>> dartbug.com/15914
Object get _globalState => null;

set _globalState(Object val) {
}

void setX(x) {
}
<<<
Object get _globalState => null;

set _globalState(Object val) {
}

void setX(x) {
}
>>> dartbug.com/16405
class ContactImpulse {
  List<double> normalImpulses = new List<double>(Settings.MAX_MANIFOLD_POINTS);
  List<double> tangentImpulses = new List<double>(Settings.MAX_MANIFOLD_POINTS);

  ContactImpulse();
}
<<<
class ContactImpulse {
  List<double> normalImpulses = new List<double>(Settings.MAX_MANIFOLD_POINTS);
  List<double> tangentImpulses = new List<double>(Settings.MAX_MANIFOLD_POINTS);

  ContactImpulse();
}
>>> Empty class bodies may be on one line (or more)
class A extends B { }
<<<
class A extends B {}
>>>
class A extends B {

}
<<<
class A extends B {

}
>>> Single initializers can be on one line
class Foo extends Bar {
  final int b;
  Foo(int a, this.b) : super(a);
}
<<<
class Foo extends Bar {
  final int b;
  Foo(int a, this.b) : super(a);
}
>>> (or not)
class Foo extends Bar {
  final int b;
  Foo(int a, this.b)
      : super(a);
}
<<<
class Foo extends Bar {
  final int b;
  Foo(int a, this.b)
      : super(a);
}
>>> Multiple initializers are one per line
class Foo extends Bar {
  final int b;
  Foo(int a, int b) : super(a), this.b = b == null ? 0 : b;
}
<<<
class Foo extends Bar {
  final int b;
  Foo(int a, int b)
      : super(a),
        this.b = b == null ? 0 : b;
}
>>> dartbug.com/17837
@meta class Foo {
  @meta String foo;
  @meta int bar() => 42;
}
@meta
class Bar {
  @meta
  String foo;
  @meta
  int bar() => 42;
}
<<<
@meta class Foo {
  @meta String foo;
  @meta int bar() => 42;
}
@meta
class Bar {
  @meta
  String foo;
  @meta
  int bar() => 42;
}
>>>
import 'a.dart' deferred as a;
<<<
import 'a.dart' deferred as a;
>>> Long parameters list, place the opening curly brace ({) on the same line
class Foo {
  method(int a012345678901234567890123456789, int b012345678901234567890123456)
  {
    print('42');
  }
}
<<<
class Foo {
  method(int a012345678901234567890123456789,
      int b012345678901234567890123456) {
    print('42');
  }
}
>>> Long parameters list, this.field
class A {
  int a0123456789012345678901234;
  int b0123456789012345678901234;
  int c0123456789012345678901234;
  int d0123456789012345678901234;
  A(this.a0123456789012345678901234, this.b0123456789012345678901234, this.c0123456789012345678901234,
                    this.d0123456789012345678901234);
}
<<<
class A {
  int a0123456789012345678901234;
  int b0123456789012345678901234;
  int c0123456789012345678901234;
  int d0123456789012345678901234;
  A(this.a0123456789012345678901234, this.b0123456789012345678901234,
      this.c0123456789012345678901234, this.d0123456789012345678901234);
}
