Bug 252696

Tests for ITD content assist and getting them to pass.
diff --git a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/codeconversion/AspectsConvertingParser.java b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/codeconversion/AspectsConvertingParser.java
index 5e1417b..c58d6fe 100644
--- a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/codeconversion/AspectsConvertingParser.java
+++ b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/codeconversion/AspectsConvertingParser.java
@@ -423,6 +423,7 @@
                         String superClass = type.getSuperclassName();
                         if (declareExtends.size() > 0) {
                             superClass = (String) declareExtends.get(0);
+                            superClass = superClass.replace('$', '.');
                         }
                         if (superClass != null) {
                             sb.append(" " + EXTENDS + " " + superClass);
@@ -439,12 +440,13 @@
                         if (type.isInterface()) {
                             sb.append(" " + EXTENDS + " ");
                         } else {
-                            sb.append(" " + IMPLEMENTS);
+                            sb.append(" " + IMPLEMENTS +  " ");
                         }
                     
                         for (Iterator interfaceIter = declareImplements.iterator(); interfaceIter
                                 .hasNext();) {
                             String interName = (String) interfaceIter.next();
+                            interName = interName.replace('$', '.');
                             sb.append(" " + interName);
                             if (interfaceIter.hasNext()) {
                                 sb.append(",");
@@ -501,7 +503,7 @@
                 IType type = unit.getType(new String(currentTypeName));
                 if (type.exists()) {
                     List /*IJavaElement*/ rels = model.getRelationshipsForElement(type, AJRelationshipManager.ASPECT_DECLARATIONS);
-                    StringBuffer sb = new StringBuffer();
+                    StringBuffer sb = new StringBuffer("\n\t");
                     for (Iterator relIter = rels.iterator(); relIter.hasNext();) {
                         IJavaElement je = (IJavaElement) relIter.next();
                         IProgramElement declareElt = model.javaElementToProgramElement(je);
diff --git a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/AspectElement.java b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/AspectElement.java
index 13aa77d..57bca4b 100755
--- a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/AspectElement.java
+++ b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/AspectElement.java
@@ -10,13 +10,18 @@
  *******************************************************************************/
 package org.eclipse.ajdt.core.javaelements;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.aspectj.asm.IHierarchy;
 import org.aspectj.asm.IProgramElement;
 import org.aspectj.asm.IProgramElement.Accessibility;
 import org.aspectj.asm.IProgramElement.ExtraInformation;
 import org.aspectj.asm.IProgramElement.Kind;
+import org.aspectj.asm.internal.ProgramElement;
+import org.aspectj.bridge.ISourceLocation;
+import org.eclipse.ajdt.core.model.AJProjectModelFactory;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IMethod;
@@ -62,6 +67,20 @@
         info.setAJKind(IProgramElement.Kind.ASPECT);
         info.setHandle(this);
         info.setSourceRangeStart(0);
+        
+        IProgramElement ipe = AJProjectModelFactory.getInstance().getModelForJavaElement(this).javaElementToProgramElement(this);
+        if (ipe != IHierarchy.NO_STRUCTURE) {
+            info.setAJExtraInfo(ipe.getExtraInfo());
+            info.setAJModifiers(ipe.getModifiers());
+            info.setFlags(getProgramElementModifiers(ipe));
+            info.setAJAccessibility(ipe.getAccessibility());
+            ISourceLocation sourceLocation = ipe.getSourceLocation();
+            info.setSourceRangeStart(sourceLocation.getOffset());
+            info.setNameSourceStart(sourceLocation.getOffset());
+            info.setNameSourceEnd(sourceLocation.getOffset() + ipe.getName().length());
+        }
+        
+        
         return info;
     }
 
@@ -374,4 +393,21 @@
 		}
 		return super.getHandleFromMemento(token, memento, workingCopyOwner);
 	}
+	
+	   static Field modfiersField = null;
+	    static int getProgramElementModifiers(IProgramElement ipe) {
+	        try {
+	            if (modfiersField == null) {
+	                modfiersField = ProgramElement.class.getDeclaredField("modifiers");
+	                modfiersField.setAccessible(true);
+	            }
+	            return modfiersField.getInt(ipe);
+	        } catch (SecurityException e) {
+	        } catch (IllegalArgumentException e) {
+	        } catch (NoSuchFieldException e) {
+	        } catch (IllegalAccessException e) {
+	        }
+	        return -1;
+	    }
+
 }
diff --git a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/IntertypeElement.java b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/IntertypeElement.java
index 6dbdfc6..eaff891 100755
--- a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/IntertypeElement.java
+++ b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/javaelements/IntertypeElement.java
@@ -10,11 +10,13 @@
  *******************************************************************************/
 package org.eclipse.ajdt.core.javaelements;
 
+import java.lang.reflect.Field;
 import java.util.Iterator;
 import java.util.List;
 
 import org.aspectj.asm.IHierarchy;
 import org.aspectj.asm.IProgramElement;
+import org.aspectj.asm.internal.ProgramElement;
 import org.aspectj.bridge.ISourceLocation;
 import org.eclipse.jdt.internal.core.SourceConstructorInfo;
 import org.eclipse.ajdt.core.model.AJProjectModelFactory;
@@ -52,6 +54,7 @@
             info.setName(name.toCharArray());
             info.setAJKind(ipe.getKind());
             info.setAJModifiers(ipe.getModifiers());
+            info.setFlags(getProgramElementModifiers(ipe));
             info.setAJAccessibility(ipe.getAccessibility());
             ISourceLocation sourceLocation = ipe.getSourceLocation();
             info.setSourceRangeStart(sourceLocation.getOffset());
@@ -68,6 +71,21 @@
 	    return info;
 	}
 
+	static Field modfiersField = null;
+	static int getProgramElementModifiers(IProgramElement ipe) {
+	    try {
+            if (modfiersField == null) {
+                modfiersField = ProgramElement.class.getDeclaredField("modifiers");
+                modfiersField.setAccessible(true);
+            }
+            return modfiersField.getInt(ipe);
+        } catch (SecurityException e) {
+        } catch (IllegalArgumentException e) {
+        } catch (NoSuchFieldException e) {
+        } catch (IllegalAccessException e) {
+        }
+        return -1;
+	}
 	
 	
 	/**
@@ -185,30 +203,6 @@
 	    }
 
 	
-	private String[] charArrayToStringArray(char[][] chars) {
-	    if (chars != null) {
-    	    String[] strings = new String[chars.length];
-    	    for (int i = 0; i < chars.length; i++) {
-                strings[i] = new String(chars[i]);
-            }
-    	    return strings;
-	    } else {
-	        return new String[0];
-	    }
-	}
-
-	private String[] toSignatures(char[][] strings) {
-	    if (strings != null) {
-    	    String[] sigs = new String[strings.length];
-    	    for (int i = 0; i < sigs.length; i++) {
-                sigs[i] = Signature.createTypeSignature(strings[i], true);
-            }
-    	    return sigs;
-	    } else {
-	        return new String[0];
-	    }
-	}
-	
 	/**
 	 * @author andrew
 	 * just expose all the protected setter methods