init(parent, project) {
    this._super();
    this.parent = parent;
    this.project = project;
    this.ui = project && project.ui;
    this.addonPackages = Object.create(null);
    this.addons = [];
    this.registry = p.defaultRegistry(this);

    if (!this.root) {
      throw new Error('Addon classes must be instantiated with the `root` property');
    }

    if (!this.name) {
      throw new SilentError(`An addon must define a \`name\` property (found at ${this.root}).`);
    }

    this._nodeModulesPath = null;

    this.treePaths = {
      app: 'app',
      styles: 'app/styles',
      templates: 'app/templates',
      addon: 'addon',
      'addon-styles': 'addon/styles',
      'addon-templates': 'addon/templates',
      vendor: 'vendor',
      'test-support': 'test-support',
      'addon-test-support': 'addon-test-support',
      public: 'public',
    };

    this.treeForMethods = defaultsDeep({}, DEFAULT_TREE_FOR_METHODS);

    if (this.parent) {
      // The parent should already have a packageInfoCache.
      // Because it does, this package should already be in the cache.
      this.packageInfoCache = this.parent.packageInfoCache;
    }

    if (!this.packageInfoCache) {
      // this is most likely a 'root' addon, so create a new PackageInfoCache
      // for it so we get the PackageInfo for it and its children.
      //
      // this may also be someone who failed to mock their addon correctly in testing.
      this.packageInfoCache = new PackageInfoCache(this.ui);
    }

    this._packageInfo = this.packageInfoCache.loadAddon(this);

    p.setupRegistry(this);

    this._initDefaultBabelOptions();
  }
Initializes the addon.  If you override this method make sure and call `this._super.init && this._super.init.apply(this, arguments);` or your addon will not work.

    @public
    @method init
    @param {Project|Addon} parent The project or addon that directly depends on this addon
    @param {Project} project The current project (deprecated)

    @example
    ```js
    init(parent, project) {
      this._super.init && this._super.init.apply(this, arguments);
      this._someCustomSetup();
    }
    ```