aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2008-06-06 00:22:43 +0000
committeraclement <aclement>2008-06-06 00:22:43 +0000
commit0fe881dc527459faa5dfdf032416d4d8bf769124 (patch)
treea82047361525b56f902aa48cb14eb583c89ab261
parent6c13ed35770d71e2f4df1393f0ae7e976e291b23 (diff)
downloadaspectj-0fe881dc527459faa5dfdf032416d4d8bf769124.tar.gz
aspectj-0fe881dc527459faa5dfdf032416d4d8bf769124.zip
231396: refactoring AspectJ: moving junk out of MemberImpl
-rw-r--r--weaver/src/org/aspectj/weaver/SignatureUtils.java246
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();
+ }
+
+}