/* *******************************************************************
 * 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
/** * 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)); } }