Package org.aspectj.weaver

Source Code of org.aspectj.weaver.NewMemberClassTypeMunger

/* *******************************************************************
* Copyright (c) 2010 SpringSource, Contributors
* 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.aspectj.weaver;

import java.io.IOException;
import java.util.List;

import org.aspectj.bridge.ISourceLocation;

/**
* Weaver representation of an intertype declared member class. The munger captures the name of the type being declared and the
* target.
*
* @author Andy Clement
* @since 1.6.9
*/
public class NewMemberClassTypeMunger extends ResolvedTypeMunger {

  private UnresolvedType targetType;
  private String memberTypeName; // short (last part of) name
  private int version = 1; // 1.6.9m2

  public NewMemberClassTypeMunger(UnresolvedType targetType, String memberTypeName) {
    super(ResolvedTypeMunger.InnerClass, null);
    this.targetType = targetType;
    this.memberTypeName = memberTypeName;
  }

  @Override
  public void write(CompressingDataOutputStream stream) throws IOException {
    kind.write(stream);
    stream.writeInt(version);
    targetType.write(stream);
    stream.writeUTF(memberTypeName);
    writeSourceLocation(stream);
    writeOutTypeAliases(stream);
  }

  public static ResolvedTypeMunger readInnerClass(VersionedDataInputStream stream, ISourceContext context) throws IOException {
    /* int version = */stream.readInt();
    UnresolvedType targetType = UnresolvedType.read(stream);
    String memberTypeName = stream.readUTF();
    ISourceLocation sourceLocation = readSourceLocation(stream);
    List<String> typeVarAliases = readInTypeAliases(stream);

    NewMemberClassTypeMunger newInstance = new NewMemberClassTypeMunger(targetType, memberTypeName);
    newInstance.setTypeVariableAliases(typeVarAliases);
    newInstance.setSourceLocation(sourceLocation);
    return newInstance;
  }

  public UnresolvedType getTargetType() {
    return targetType;
  }

  public UnresolvedType getDeclaringType() {
    return targetType;
  }

  public String getMemberTypeName() {
    return memberTypeName;
  }

  public int hashCode() {
    int result = 17;
    result = 37 * result + kind.hashCode();
    result = 37 * result + memberTypeName.hashCode();
    result = 37 * result + targetType.hashCode();
    result = 37 * result + ((typeVariableAliases == null) ? 0 : typeVariableAliases.hashCode());
    return result;
  }

  public boolean equals(Object other) {
    if (!(other instanceof NewMemberClassTypeMunger)) {
      return false;
    }
    NewMemberClassTypeMunger o = (NewMemberClassTypeMunger) other;
    return ((kind == null) ? (o.kind == null) : kind.equals(o.kind))
        && memberTypeName.equals(o.memberTypeName)
        && targetType.equals(o.targetType)
        && ((typeVariableAliases == null) ? (o.typeVariableAliases == null) : typeVariableAliases
            .equals(o.typeVariableAliases));
  }
}
TOP

Related Classes of org.aspectj.weaver.NewMemberClassTypeMunger

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.