Diff (Proto past) { final Difference delegate = super.difference(past); final ModuleRepr pastModule = (ModuleRepr)past; final int base = !getUsages().equals(pastModule.getUsages())? delegate.base() | Difference.USAGES : delegate.base(); return new Diff(delegate) { @Override public Specifier<ModuleRequiresRepr, ModuleRequiresRepr.Diff> requires() { return Difference.make(pastModule.myRequires, myRequires); } @Override public Specifier<ModulePackageRepr, ModulePackageRepr.Diff> exports() { return Difference.make(pastModule.myExports, myExports); } @Override public boolean versionChanged() { return pastModule.getVersion() != myVersion; } @Override public int base() { return base; } }; }