Package com.google.gwt.user.rebind.rpc

Source Code of com.google.gwt.user.rebind.rpc.JTypeVisitor

/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package com.google.gwt.user.rebind.rpc;

import com.google.gwt.core.ext.typeinfo.JAnnotationType;
import com.google.gwt.core.ext.typeinfo.JArrayType;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JEnumType;
import com.google.gwt.core.ext.typeinfo.JGenericType;
import com.google.gwt.core.ext.typeinfo.JParameterizedType;
import com.google.gwt.core.ext.typeinfo.JPrimitiveType;
import com.google.gwt.core.ext.typeinfo.JRawType;
import com.google.gwt.core.ext.typeinfo.JRealClassType;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.JTypeParameter;
import com.google.gwt.core.ext.typeinfo.JWildcardType;

/**
* A visitor that traverses the structure of a {@link JType}.
*/
class JTypeVisitor {
  /**
   * Accept <code>type</code>, traverse its children with
   * {@link #acceptChildren(JType)}, and then call {@link #endVisit(JType)} on
   * <code>type</code> itself.
   */
  public void accept(JType type) {
    acceptChildren(type);
    endVisit(type);
  }

  /**
   * Call {@link #accept(JType)} on all children types of <code>type</code>.
   * The children type of a type are its structural components. For example, an
   * array type has one child, which is the component type of the array.
   */
  protected void acceptChildren(JType type) {
    JArrayType typeArray = type.isArray();
    if (typeArray != null) {
      accept(typeArray.getComponentType());
      endVisit(typeArray);
    }

    JParameterizedType typeParameterized = type.isParameterized();
    if (typeParameterized != null) {
      accept(typeParameterized.getBaseType());
      for (JClassType typeArg : typeParameterized.getTypeArgs()) {
        accept(typeArg);
      }
      endVisit(typeParameterized);
    }

    JRawType typeRaw = type.isRawType();
    if (typeRaw != null) {
      accept(typeRaw.getBaseType());
      endVisit(typeRaw);
    }

    JWildcardType typeWild = type.isWildcard();
    if (typeWild != null) {
      accept(typeWild.getFirstBound());
      endVisit(typeWild);
    }
  }

  /**
   * @param typeAnnotation
   */
  protected void endVisit(JAnnotationType typeAnnotation) {
  }

  /**
   * @param typeArray
   */
  protected void endVisit(JArrayType typeArray) {
  }

  /**
   * @param typeEnum
   */
  protected void endVisit(JEnumType typeEnum) {
  }

  /**
   * @param typeGeneric
   */
  protected void endVisit(JGenericType typeGeneric) {
  }

  /**
   * @param typeParameterized
   */
  protected void endVisit(JParameterizedType typeParameterized) {
  }

  /**
   * @param typePrimitive
   */
  protected void endVisit(JPrimitiveType typePrimitive) {
  }

  /**
   * @param typeRaw
   */
  protected void endVisit(JRawType typeRaw) {
  }

  /**
   * @param typeReal
   */
  protected void endVisit(JRealClassType typeReal) {
  }

  /**
   * This endVisit is called on all visited types. By default it dispatches to
   * one of the more specific endVisit methods, e.g.
   * {@link #endVisit(JArrayType)}.
   */
  protected void endVisit(JType type) {
    JAnnotationType typeAnnotation = type.isAnnotation();
    if (typeAnnotation != null) {
      endVisit(typeAnnotation);
      return;
    }

    JArrayType typeArray = type.isArray();
    if (typeArray != null) {
      endVisit(typeArray);
      return;
    }

    JEnumType typeEnum = type.isEnum();
    if (typeEnum != null) {
      endVisit(typeEnum);
      return;
    }

    JGenericType typeGeneric = type.isGenericType();
    if (typeGeneric != null) {
      endVisit(typeGeneric);
      return;
    }

    JParameterizedType typeParameterized = type.isParameterized();
    if (typeParameterized != null) {
      endVisit(typeParameterized);
      return;
    }

    JPrimitiveType typePrimitive = type.isPrimitive();
    if (typePrimitive != null) {
      endVisit(typePrimitive);
      return;
    }

    JRawType typeRaw = type.isRawType();
    if (typeRaw != null) {
      endVisit(typeRaw);
      return;
    }

    JTypeParameter typeParam = type.isTypeParameter();
    if (typeParam != null) {
      endVisit(typeParam);
      return;
    }

    JWildcardType typeWild = type.isWildcard();
    if (typeWild != null) {
      endVisit(typeWild);
      return;
    }

    JRealClassType typeReal = (JRealClassType) type;
    endVisit(typeReal);
  }

  /**
   * @param typeParam
   */
  protected void endVisit(JTypeParameter typeParam) {
  }

  /**
   * @param typeWild
   */
  protected void endVisit(JWildcardType typeWild) {
  }

}
TOP

Related Classes of com.google.gwt.user.rebind.rpc.JTypeVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.