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