diff options
author | aclement <aclement> | 2008-06-06 00:22:43 +0000 |
---|---|---|
committer | aclement <aclement> | 2008-06-06 00:22:43 +0000 |
commit | 0fe881dc527459faa5dfdf032416d4d8bf769124 (patch) | |
tree | a82047361525b56f902aa48cb14eb583c89ab261 | |
parent | 6c13ed35770d71e2f4df1393f0ae7e976e291b23 (diff) | |
download | aspectj-0fe881dc527459faa5dfdf032416d4d8bf769124.tar.gz aspectj-0fe881dc527459faa5dfdf032416d4d8bf769124.zip |
231396: refactoring AspectJ: moving junk out of MemberImpl
-rw-r--r-- | weaver/src/org/aspectj/weaver/SignatureUtils.java | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/SignatureUtils.java b/weaver/src/org/aspectj/weaver/SignatureUtils.java new file mode 100644 index 000000000..af1cace6a --- /dev/null +++ b/weaver/src/org/aspectj/weaver/SignatureUtils.java @@ -0,0 +1,246 @@ +/* ******************************************************************* + * Copyright (c) 2008 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 + * + * Contributors: + * Andy Clement - refactored out of MemberImpl + * ******************************************************************/ +package org.aspectj.weaver; + +import java.lang.reflect.Modifier; + +public class SignatureUtils { + + public static String getSignatureString(Member m, World world) { + MemberKind kind = m.getKind(); + if (kind == Member.METHOD) { + return getMethodSignatureString(m,world); + } else if (kind == Member.CONSTRUCTOR) { + return getConstructorSignatureString(m,world); + } else if (kind == Member.FIELD) { + return getFieldSignatureString(m,world); + } else if (kind == Member.HANDLER) { + return getHandlerSignatureString(m,world); + } else if (kind == Member.STATIC_INITIALIZATION) { + return getStaticInitializationSignatureString(m,world); + } else if (kind == Member.ADVICE) { + return getAdviceSignatureString(m,world); + } else if (kind == Member.MONITORENTER || kind == Member.MONITOREXIT) { + return getMonitorSignatureString(m,world); + } else { + throw new BCException("Do not know the signature string for MemberKind "+kind); + } + } + + public static String getSignatureMakerName(Member m) { + MemberKind kind = m.getKind(); + if (kind == Member.METHOD) { + return "makeMethodSig"; + } else if (kind == Member.CONSTRUCTOR) { + return "makeConstructorSig"; + } else if (kind == Member.FIELD) { + return "makeFieldSig"; + } else if (kind == Member.HANDLER) { + return "makeCatchClauseSig"; + } else if (kind == Member.STATIC_INITIALIZATION) { + return "makeInitializerSig"; + } else if (kind == Member.ADVICE) { + return "makeAdviceSig"; + } else if (kind == Member.MONITORENTER) { + return "makeLockSig"; + } else if (kind == Member.MONITOREXIT) { + return "makeUnlockSig"; + } else { + throw new BCException("Do not know the signature maker name for MemberKind "+kind); + } + } + + public static String getSignatureType(Member m) { + MemberKind kind = m.getKind(); + if (m.getName().equals("<clinit>") && kind!=Member.STATIC_INITIALIZATION) throw new BCException(); +// if (m.getName().equals("<clinit>")) return "org.aspectj.lang.reflect.InitializerSignature"; + + if (kind == Member.METHOD) { + return "org.aspectj.lang.reflect.MethodSignature"; + } else if (kind == Member.CONSTRUCTOR) { + return "org.aspectj.lang.reflect.ConstructorSignature"; + } else if (kind == Member.FIELD) { + return "org.aspectj.lang.reflect.FieldSignature"; + } else if (kind == Member.HANDLER) { + return "org.aspectj.lang.reflect.CatchClauseSignature"; + } else if (kind == Member.STATIC_INITIALIZATION) { + return "org.aspectj.lang.reflect.InitializerSignature"; + } else if (kind == Member.ADVICE) { + return "org.aspectj.lang.reflect.AdviceSignature"; + } else if (kind == Member.MONITORENTER) { + return "org.aspectj.lang.reflect.LockSignature"; + } else if (kind == Member.MONITOREXIT) { + return "org.aspectj.lang.reflect.UnlockSignature"; + } else { + throw new BCException("Do not know the signature type for MemberKind "+kind); + } + } + + + // --- + + + private static String getHandlerSignatureString(Member m, World world) { + StringBuffer buf = new StringBuffer(); + buf.append(makeString(0)); + buf.append('-'); + //buf.append(getName()); + buf.append('-'); + buf.append(makeString(m.getDeclaringType())); + buf.append('-'); + buf.append(makeString(m.getParameterTypes()[0])); + buf.append('-'); + String pName = "<missing>"; + String[] names = m.getParameterNames(world); + if (names != null) pName = names[0]; + buf.append(pName); + buf.append('-'); + return buf.toString(); + } + + private static String getStaticInitializationSignatureString(Member m, World world) { + StringBuffer buf = new StringBuffer(); + buf.append(makeString(m.getModifiers(world))); + buf.append('-'); + //buf.append(getName()); + buf.append('-'); + buf.append(makeString(m.getDeclaringType())); + buf.append('-'); + return buf.toString(); + } + + protected static String getAdviceSignatureString(Member m, World world) { + StringBuffer buf = new StringBuffer(); + buf.append(makeString(m.getModifiers(world))); + buf.append('-'); + buf.append(m.getName()); + buf.append('-'); + buf.append(makeString(m.getDeclaringType())); + buf.append('-'); + buf.append(makeString(m.getParameterTypes())); + buf.append('-'); + buf.append(makeString(m.getParameterNames(world))); + buf.append('-'); + buf.append(makeString(m.getExceptions(world))); + buf.append('-'); + buf.append(makeString(m.getReturnType())); + buf.append('-'); + return buf.toString(); + } + + + protected static String getMethodSignatureString(Member m, World world) { + StringBuffer buf = new StringBuffer(); + buf.append(makeString(m.getModifiers(world))); + buf.append('-'); + buf.append(m.getName()); + buf.append('-'); + buf.append(makeString(m.getDeclaringType())); + buf.append('-'); + buf.append(makeString(m.getParameterTypes())); + buf.append('-'); + buf.append(makeString(m.getParameterNames(world))); + buf.append('-'); + buf.append(makeString(m.getExceptions(world))); + buf.append('-'); + buf.append(makeString(m.getReturnType())); + buf.append('-'); + return buf.toString(); + } + + protected static String getMonitorSignatureString(Member m, World world) { + StringBuffer buf = new StringBuffer(); + buf.append(makeString(Modifier.STATIC)); // modifiers + buf.append('-'); + buf.append(m.getName()); // name + buf.append('-'); + buf.append(makeString(m.getDeclaringType())); // Declaring Type + buf.append('-'); + buf.append(makeString(m.getParameterTypes()[0])); // Parameter Types + buf.append('-'); + buf.append(""); // Parameter names + buf.append('-'); + return buf.toString(); + } + + protected static String getConstructorSignatureString(Member m, World world) { + StringBuffer buf = new StringBuffer(); + buf.append(makeString(m.getModifiers(world))); + buf.append('-'); + buf.append('-'); + buf.append(makeString(m.getDeclaringType())); + buf.append('-'); + buf.append(makeString(m.getParameterTypes())); + buf.append('-'); + buf.append(makeString(m.getParameterNames(world))); + buf.append('-'); + buf.append(makeString(m.getExceptions(world))); + buf.append('-'); + return buf.toString(); + } + + + + + protected static String getFieldSignatureString(Member m, World world) { + StringBuffer buf = new StringBuffer(); + buf.append(makeString(m.getModifiers(world))); + buf.append('-'); + buf.append(m.getName()); + buf.append('-'); + buf.append(makeString(m.getDeclaringType())); + buf.append('-'); + buf.append(makeString(m.getReturnType())); + buf.append('-'); + return buf.toString(); + } + + protected static String makeString(int i) { + return Integer.toString(i, 16); + } + + protected static String makeString(UnresolvedType t) { + // this is the inverse of the odd behavior for Class.forName w/ arrays + if (t.isArray()) { + // this behavior matches the string used by the eclipse compiler for Foo.class literals + return t.getSignature().replace('/', '.'); + } else { + return t.getName(); + } + } + + + + protected static String makeString(UnresolvedType[] types) { + if (types == null) return ""; + StringBuffer buf = new StringBuffer(); + for (int i = 0, len=types.length; i < len; i++) { + buf.append(makeString(types[i])); + buf.append(':'); + } + return buf.toString(); + } + + + + protected static String makeString(String[] names) { + if (names == null) return ""; + StringBuffer buf = new StringBuffer(); + for (int i = 0, len=names.length; i < len; i++) { + buf.append(names[i]); + buf.append(':'); + } + return buf.toString(); + } + +} |