/*
 * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.yangtools.yang.data.api.schema.tree;

import com.google.common.annotations.Beta;

/**
 * Tip of a data tree instance. It acts as a point to which modifications can be applied.
 */
// FIXME: 3.0.0: Use @NonNullByDefault
@Beta
public interface DataTreeTip {
    /**
     * Validate whether a particular modification can be applied to the data tree.
     *
     * @param modification Data tree modification.
     * @throws DataValidationFailedException If modification data is not valid.
     */
    // FIXME: 3.0.0: document NullPointerException being thrown
    // FIXME: 3.0.0: document IllegalArgumentException being thrown
    void validate(DataTreeModification modification) throws DataValidationFailedException;

    /**
     * Prepare a modification for commit.
     *
     * @param modification Data tree modification.
     * @return candidate data tree
     */
    // FIXME: 3.0.0: document NullPointerException being thrown
    // FIXME: 3.0.0: document IllegalArgumentException being thrown
    // FIXME: 3.0.0: throw DataValidationFailedException or similar
    DataTreeCandidateTip prepare(DataTreeModification modification);

    /**
     * {@inheritDoc}
     *
     * {@link DataTreeTip} implementations must not override the default identity hashCode method.
     */
    @Override
    int hashCode();

    /**
     * {@inheritDoc}
     *
     * {@link DataTreeTip} implementations must not override the default identity hashCode method, meaning their
     * equals implementation must result in identity comparison.
     */
    @Override
    boolean equals(Object obj);
}

@@ -406,16 +406,112 @@
 ns.Beta;
+%0Aimport org.eclipse.jdt.annotation.NonNullByDefault;%0Aimport org.eclipse.jdt.annotation.Nullable;
 %0A%0A/**%0A *
@@ -606,29 +606,14 @@
  */%0A
-// FIXME: 3.0.0: Use 
+@Beta%0A
 @Non
@@ -626,22 +626,16 @@
 Default%0A
-@Beta%0A
 public i
@@ -896,141 +896,141 @@
    *
-/%0A    // FIXME: 3.0.0: document NullPointerException being thrown%0A    // FIXME: 3.0.0: document IllegalArgumentException being thrown
+ @throws NullPointerException if modification is null%0A     * @throws IllegalArgumentException if modification is unrecognized%0A     */
 %0A   
@@ -1271,141 +1271,141 @@
    *
-/%0A    // FIXME: 3.0.0: document NullPointerException being thrown%0A    // FIXME: 3.0.0: document IllegalArgumentException being thrown
+ @throws NullPointerException if modification is null%0A     * @throws IllegalArgumentException if modification is unrecognized%0A     */
 %0A   
@@ -1419,9 +1419,9 @@
 ME: 
-3
+4
 .0.0
@@ -1972,16 +1972,26 @@
  equals(
+@Nullable 
 Object o

Address DataTreeTip 3.0.0 FIXMEs