diff options
author | aclement <aclement> | 2010-07-07 19:24:14 +0000 |
---|---|---|
committer | aclement <aclement> | 2010-07-07 19:24:14 +0000 |
commit | 7b5b7a3b6807b610a79b30a1d96cad327cae0c0f (patch) | |
tree | c0c5b5659af494f1d5f825fcbd6ea74f0c525d18 /asm/src | |
parent | 550e9ec9e6c9efa09c9d53385bb612e4c0022d86 (diff) | |
download | aspectj-7b5b7a3b6807b610a79b30a1d96cad327cae0c0f.tar.gz aspectj-7b5b7a3b6807b610a79b30a1d96cad327cae0c0f.zip |
generics
Diffstat (limited to 'asm/src')
-rw-r--r-- | asm/src/org/aspectj/asm/AsmManager.java | 67 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/IHierarchy.java | 12 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/IProgramElement.java | 15 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/IRelationship.java | 2 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/IRelationshipMap.java | 79 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/internal/AspectJElementHierarchy.java | 42 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/internal/NameConvertor.java | 18 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/internal/ProgramElement.java | 45 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/internal/Relationship.java | 50 | ||||
-rw-r--r-- | asm/src/org/aspectj/asm/internal/RelationshipMap.java | 51 |
10 files changed, 177 insertions, 204 deletions
diff --git a/asm/src/org/aspectj/asm/AsmManager.java b/asm/src/org/aspectj/asm/AsmManager.java index 1eec7e0c1..2eebbd6d9 100644 --- a/asm/src/org/aspectj/asm/AsmManager.java +++ b/asm/src/org/aspectj/asm/AsmManager.java @@ -73,7 +73,7 @@ public class AsmManager implements IStructureModel { private static boolean completingTypeBindings = false; - private final List structureListeners = new ArrayList(); + private final List<IHierarchyListener> structureListeners = new ArrayList<IHierarchyListener>(); // The model is 'manipulated' by the AjBuildManager.setupModel() code which // trashes all the @@ -95,7 +95,7 @@ public class AsmManager implements IStructureModel { private final CanonicalFilePathMap canonicalFilePathMap = new CanonicalFilePathMap(); // Record the Set<File> for which the model has been modified during the // last incremental build - private final Set lastBuildChanges = new HashSet(); + private final Set<File> lastBuildChanges = new HashSet<File>(); // Record the Set<File> of aspects that wove the files listed in lastBuildChanges final Set aspectsWeavingInLastBuild = new HashSet(); @@ -148,22 +148,22 @@ public class AsmManager implements IStructureModel { return null; } - HashMap annotations = new HashMap(); + HashMap<Integer, List<IProgramElement>> annotations = new HashMap<Integer, List<IProgramElement>>(); IProgramElement node = hierarchy.findElementForSourceFile(sourceFile); if (node == IHierarchy.NO_STRUCTURE) { return null; } else { IProgramElement fileNode = node; - ArrayList peNodes = new ArrayList(); + ArrayList<IProgramElement> peNodes = new ArrayList<IProgramElement>(); getAllStructureChildren(fileNode, peNodes, showSubMember, showMemberAndType); - for (Iterator it = peNodes.iterator(); it.hasNext();) { - IProgramElement peNode = (IProgramElement) it.next(); - List entries = new ArrayList(); + for (Iterator<IProgramElement> it = peNodes.iterator(); it.hasNext();) { + IProgramElement peNode = it.next(); + List<IProgramElement> entries = new ArrayList<IProgramElement>(); entries.add(peNode); ISourceLocation sourceLoc = peNode.getSourceLocation(); if (null != sourceLoc) { Integer hash = new Integer(sourceLoc.getLine()); - List existingEntry = (List) annotations.get(hash); + List<IProgramElement> existingEntry = annotations.get(hash); if (existingEntry != null) { entries.addAll(existingEntry); } @@ -174,14 +174,14 @@ public class AsmManager implements IStructureModel { } } - private void getAllStructureChildren(IProgramElement node, List result, boolean showSubMember, boolean showMemberAndType) { - List children = node.getChildren(); + private void getAllStructureChildren(IProgramElement node, List<IProgramElement> result, boolean showSubMember, + boolean showMemberAndType) { + List<IProgramElement> children = node.getChildren(); if (node.getChildren() == null) { return; } - for (Iterator it = children.iterator(); it.hasNext();) { - IProgramElement next = (IProgramElement) it.next(); - List rels = mapper.get(next); + for (IProgramElement next : children) { + List<IRelationship> rels = mapper.get(next); if (next != null && ((next.getKind() == IProgramElement.Kind.CODE && showSubMember) || (next.getKind() != IProgramElement.Kind.CODE && showMemberAndType)) && rels != null && rels.size() > 0) { @@ -208,8 +208,8 @@ public class AsmManager implements IStructureModel { } private void notifyListeners() { - for (Iterator it = structureListeners.iterator(); it.hasNext();) { - ((IHierarchyListener) it.next()).elementsUpdated(hierarchy); + for (IHierarchyListener listener : structureListeners) { + listener.elementsUpdated(hierarchy); } } @@ -297,26 +297,26 @@ public class AsmManager implements IStructureModel { // // guards to ensure correctness and liveness // private boolean cacheInUse = false; // private boolean stopRequested = false; - // + // // private synchronized boolean isCacheInUse() { // return cacheInUse; // } - // + // // private synchronized void setCacheInUse(boolean val) { // cacheInUse = val; // if (val) { // notifyAll(); // } // } - // + // // private synchronized boolean isStopRequested() { // return stopRequested; // } - // + // // private synchronized void requestStop() { // stopRequested = true; // } - // + // // /** // * Begin prepopulating the map by adding an entry from // * file.getPath -> file.getCanonicalPath for each file in @@ -351,7 +351,7 @@ public class AsmManager implements IStructureModel { // } // }.start(); // } - // + // // /** // * Stop pre-populating the cache - our customers are ready to use it. // * If there are any cache misses from this point on, we'll populate @@ -552,7 +552,7 @@ public class AsmManager implements IStructureModel { boolean modelModified = false; - Set deletedNodes = new HashSet(); + Set<String> deletedNodes = new HashSet<String>(); for (Iterator iter = files.iterator(); iter.hasNext();) { File fileForCompilation = (File) iter.next(); String correctedPath = getCanonicalFilePath(fileForCompilation); @@ -595,7 +595,7 @@ public class AsmManager implements IStructureModel { Set filesToRemoveFromStructureModel = new HashSet(filesToBeCompiled); filesToRemoveFromStructureModel.addAll(files_deleted); - Set deletedNodes = new HashSet(); + Set<String> deletedNodes = new HashSet<String>(); for (Iterator iter = filesToRemoveFromStructureModel.iterator(); iter.hasNext();) { File fileForCompilation = (File) iter.next(); String correctedPath = getCanonicalFilePath(fileForCompilation); @@ -738,7 +738,7 @@ public class AsmManager implements IStructureModel { // type (since it will be readded // when the type is woven) Set sourcehandlesSet = mapper.getEntries(); - List relationshipsToRemove = new ArrayList(); + List<IRelationship> relationshipsToRemove = new ArrayList<IRelationship>(); for (Iterator keyiter = sourcehandlesSet.iterator(); keyiter.hasNext();) { String hid = (String) keyiter.next(); if (isPhantomHandle(hid)) { @@ -752,18 +752,17 @@ public class AsmManager implements IStructureModel { if (sourceElement == null || sameType(hid, sourceElement, typeNode)) { // worth continuing as there may be a relationship to remove relationshipsToRemove.clear(); - List relationships = mapper.get(hid); - for (Iterator reliter = relationships.iterator(); reliter.hasNext();) { - IRelationship rel = (IRelationship) reliter.next(); - if (rel.getKind() == IRelationship.Kind.USES_POINTCUT) { + List<IRelationship> relationships = mapper.get(hid); + for (IRelationship relationship : relationships) { + if (relationship.getKind() == IRelationship.Kind.USES_POINTCUT) { continue; // these relationships are added at compile } // time, argh - if (rel.isAffects()) { + if (relationship.isAffects()) { continue; // we want 'affected by' relationships - (e.g. } // advised by) - relationshipsToRemove.add(rel); // all the relationships can + relationshipsToRemove.add(relationship); // all the relationships can // be removed, regardless of // the target(s) } @@ -1002,12 +1001,12 @@ public class AsmManager implements IStructureModel { nonExistingHandles.add(hid); // Speed up a bit you swine } else { // Ok, so the source is valid, what about the targets? - List relationships = mapper.get(hid); - List relationshipsToRemove = new ArrayList(); + List<IRelationship> relationships = mapper.get(hid); + List<IRelationship> relationshipsToRemove = new ArrayList<IRelationship>(); // Iterate through the relationships against this source // handle - for (Iterator reliter = relationships.iterator(); reliter.hasNext();) { - IRelationship rel = (IRelationship) reliter.next(); + for (Iterator<IRelationship> reliter = relationships.iterator(); reliter.hasNext();) { + IRelationship rel = reliter.next(); List targets = rel.getTargets(); List targetsToRemove = new ArrayList(); diff --git a/asm/src/org/aspectj/asm/IHierarchy.java b/asm/src/org/aspectj/asm/IHierarchy.java index 50d4a5fc1..79740abe7 100644 --- a/asm/src/org/aspectj/asm/IHierarchy.java +++ b/asm/src/org/aspectj/asm/IHierarchy.java @@ -1,5 +1,5 @@ /* ******************************************************************* - * Copyright (c) 2003 Contributors. + * Copyright (c) 2003,2010 Contributors * All rights reserved. * This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 @@ -8,12 +8,12 @@ * * Contributors: * Mik Kersten initial implementation + * Andy Clement * ******************************************************************/ package org.aspectj.asm; import java.io.Serializable; import java.util.HashMap; -import java.util.Iterator; import java.util.Set; import org.aspectj.asm.internal.ProgramElement; @@ -21,8 +21,10 @@ import org.aspectj.bridge.ISourceLocation; /** * @author Mik Kersten + * @author Andy Clement */ public interface IHierarchy extends Serializable { + public static final IProgramElement NO_STRUCTURE = new ProgramElement(null, "<build to view structure>", IProgramElement.Kind.ERROR, null); @@ -32,11 +34,11 @@ public interface IHierarchy extends Serializable { public void setRoot(IProgramElement root); - public void addToFileMap(Object key, Object value); + public void addToFileMap(String canonicalFilePath, IProgramElement compilationUnitProgramElement); - public boolean removeFromFileMap(Object key); + public boolean removeFromFileMap(String canonicalFilePath); - public void setFileMap(HashMap fileMap); + public void setFileMap(HashMap<String, IProgramElement> fileMap); public Object findInFileMap(Object key); diff --git a/asm/src/org/aspectj/asm/IProgramElement.java b/asm/src/org/aspectj/asm/IProgramElement.java index a3a236b6b..eeae5227e 100644 --- a/asm/src/org/aspectj/asm/IProgramElement.java +++ b/asm/src/org/aspectj/asm/IProgramElement.java @@ -27,9 +27,9 @@ import org.aspectj.bridge.ISourceLocation; */ public interface IProgramElement extends Serializable { - public List/* IProgramElement */getChildren(); + public List<IProgramElement> getChildren(); - public void setChildren(List children); + public void setChildren(List<IProgramElement> children); public void addChild(IProgramElement child); @@ -152,9 +152,9 @@ public interface IProgramElement extends Serializable { public String toLabelString(boolean getFullyQualifiedArgTypes); - public List getParameterNames(); + public List<String> getParameterNames(); - public void setParameterNames(List list); + public void setParameterNames(List<String> list); public List getParameterSignatures(); @@ -329,8 +329,9 @@ public interface IProgramElement extends Serializable { public static Kind getKindForString(String kindString) { for (int i = 0; i < ALL.length; i++) { - if (ALL[i].toString().equals(kindString)) + if (ALL[i].toString().equals(kindString)) { return ALL[i]; + } } return ERROR; } @@ -345,8 +346,8 @@ public interface IProgramElement extends Serializable { return name; } - public static List getNonAJMemberKinds() { - List list = new ArrayList(); + public static List<Kind> getNonAJMemberKinds() { + List<Kind> list = new ArrayList<Kind>(); list.add(METHOD); list.add(ENUM_VALUE); list.add(FIELD); diff --git a/asm/src/org/aspectj/asm/IRelationship.java b/asm/src/org/aspectj/asm/IRelationship.java index 439c089d2..71f5901c2 100644 --- a/asm/src/org/aspectj/asm/IRelationship.java +++ b/asm/src/org/aspectj/asm/IRelationship.java @@ -22,7 +22,7 @@ public interface IRelationship extends Serializable { public String getName(); - public List/* String */getTargets(); + public List<String> getTargets(); public String getSourceHandle(); diff --git a/asm/src/org/aspectj/asm/IRelationshipMap.java b/asm/src/org/aspectj/asm/IRelationshipMap.java index 68f97676e..b72fa8b86 100644 --- a/asm/src/org/aspectj/asm/IRelationshipMap.java +++ b/asm/src/org/aspectj/asm/IRelationshipMap.java @@ -16,76 +16,69 @@ import java.io.Serializable; import java.util.List; import java.util.Set; -//import org.aspectj.asm.IRelationship.Kind; - /** - * Maps from a program element handles to a list of relationships between that element - * and othe program elements. Each element in the list or relationships is - * uniquely identified by a kind and a relationship name. For example, the advice affecting - * a particular shadow (e.g. method call) can be retrieved by calling <CODE>get</CODE> on - * the handle for that method. Symmetrically the method call shadows that an advice affects - * can be retrieved. + * Maps from a program element handles to a list of relationships between that element and othe program elements. Each element in + * the list or relationships is uniquely identified by a kind and a relationship name. For example, the advice affecting a + * particular shadow (e.g. method call) can be retrieved by calling <CODE>get</CODE> on the handle for that method. Symmetrically + * the method call shadows that an advice affects can be retrieved. * - * The elements can be stored and looked up as IProgramElement(s), in which cases the - * element corresponding to the handle is looked up in the containment hierarchy. + * The elements can be stored and looked up as IProgramElement(s), in which cases the element corresponding to the handle is looked + * up in the containment hierarchy. * - * put/get methods taking IProgramElement as a parameter are for convenience only. - * They work identically to calling their counterparts with IProgramElement.getIdentifierHandle() + * put/get methods taking IProgramElement as a parameter are for convenience only. They work identically to calling their + * counterparts with IProgramElement.getIdentifierHandle() * * @author Mik Kersten + * @author Andy Clement */ public interface IRelationshipMap extends Serializable { - - /** - * @return null if the element is not found. - */ - public List/*IRelationship*/ get(IProgramElement source); /** - * @return null if the element is not found. - */ - public List/*IRelationship*/ get(String handle); + * @return null if the element is not found. + */ + public List<IRelationship> get(IProgramElement source); /** - * Return a relationship matching the kind and name for the given element. - * - * @return null if the relationship is not found. + * @return null if the element is not found. */ - public IRelationship get(IProgramElement source, IRelationship.Kind kind, - String relationshipName,boolean runtimeTest, - boolean createIfMissing); + public List<IRelationship> get(String handle); /** - * Return a relationship matching the kind and name for the given element. + * Return a relationship matching the kind and name for the given element. * - * @return null if the relationship is not found. + * @return null if the relationship is not found. */ - public IRelationship get(IProgramElement source, IRelationship.Kind kind, - String relationshipName); - + public IRelationship get(IProgramElement source, IRelationship.Kind kind, String relationshipName, boolean runtimeTest, + boolean createIfMissing); + /** * Return a relationship matching the kind and name for the given element. - * Creates the relationship if not found. * - * @return null if the relationship is not found. + * @return null if the relationship is not found. */ - public IRelationship get(String source, IRelationship.Kind kind, - String relationshipName, boolean runtimeTest, - boolean createIfMissing); - + public IRelationship get(IProgramElement source, IRelationship.Kind kind, String relationshipName); + + /** + * Return a relationship matching the kind and name for the given element. Creates the relationship if not found. + * + * @return null if the relationship is not found. + */ + public IRelationship get(String source, IRelationship.Kind kind, String relationshipName, boolean runtimeTest, + boolean createIfMissing); + public void put(IProgramElement source, IRelationship relationship); public void put(String handle, IRelationship relationship); - + public boolean remove(String handle, IRelationship relationship); - + public void removeAll(String source); - + /** * Clear all of the relationships in the map. */ public void clear(); - - public Set getEntries(); - + + public Set<String> getEntries(); + } diff --git a/asm/src/org/aspectj/asm/internal/AspectJElementHierarchy.java b/asm/src/org/aspectj/asm/internal/AspectJElementHierarchy.java index d33ac9bb5..e5fcfa1d7 100644 --- a/asm/src/org/aspectj/asm/internal/AspectJElementHierarchy.java +++ b/asm/src/org/aspectj/asm/internal/AspectJElementHierarchy.java @@ -43,7 +43,7 @@ public class AspectJElementHierarchy implements IHierarchy { // Access to the handleMap and typeMap are now synchronized - at least the find methods and the updateHandleMap function // see pr305788 - private Map fileMap = null; + private Map<String, IProgramElement> fileMap = null; private Map handleMap = new HashMap(); private Map typeMap = null; @@ -69,18 +69,15 @@ public class AspectJElementHierarchy implements IHierarchy { typeMap = new HashMap(); } - public void addToFileMap(Object key, Object value) { + public void addToFileMap(String key, IProgramElement value) { fileMap.put(key, value); } - public boolean removeFromFileMap(Object key) { - if (fileMap.containsKey(key)) { - return (fileMap.remove(key) != null); - } - return true; + public boolean removeFromFileMap(String canonicalFilePath) { + return fileMap.remove(canonicalFilePath) != null; } - public void setFileMap(HashMap fileMap) { + public void setFileMap(HashMap<String, IProgramElement> fileMap) { this.fileMap = fileMap; } @@ -210,13 +207,13 @@ public class AspectJElementHierarchy implements IHierarchy { * @param packagename the packagename being searched for * @return a list of package nodes that match that name */ - public List/* IProgramElement */findMatchingPackages(String packagename) { - List children = root.getChildren(); + public List<IProgramElement> findMatchingPackages(String packagename) { + List<IProgramElement> children = root.getChildren(); // The children might be source folders or packages if (children.size() == 0) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } - if (((IProgramElement) children.get(0)).getKind() == IProgramElement.Kind.SOURCE_FOLDER) { + if ((children.get(0)).getKind() == IProgramElement.Kind.SOURCE_FOLDER) { String searchPackageName = (packagename == null ? "" : packagename); // default package means match on "" // dealing with source folders List matchingPackageNodes = new ArrayList(); @@ -559,7 +556,7 @@ public class AspectJElementHierarchy implements IHierarchy { return null; } - // + // // private IProgramElement findElementForBytecodeInfo( // IProgramElement node, // String parentName, @@ -601,7 +598,7 @@ public class AspectJElementHierarchy implements IHierarchy { // TODO rename this method ... it does more than just the handle map public void updateHandleMap(Set deletedFiles) { // Only delete the entries we need to from the handle map - for performance reasons - List forRemoval = new ArrayList(); + List<String> forRemoval = new ArrayList<String>(); Set k = null; synchronized (this) { k = handleMap.keySet(); @@ -612,8 +609,7 @@ public class AspectJElementHierarchy implements IHierarchy { forRemoval.add(handle); } } - for (Iterator iter = forRemoval.iterator(); iter.hasNext();) { - String handle = (String) iter.next(); + for (String handle : forRemoval) { handleMap.remove(handle); } forRemoval.clear(); @@ -625,22 +621,18 @@ public class AspectJElementHierarchy implements IHierarchy { forRemoval.add(typeName); } } - for (Iterator iter = forRemoval.iterator(); iter.hasNext();) { - String typeName = (String) iter.next(); + for (String typeName : forRemoval) { typeMap.remove(typeName); } forRemoval.clear(); } - k = fileMap.keySet(); - for (Iterator iter = k.iterator(); iter.hasNext();) { - String filePath = (String) iter.next(); - IProgramElement ipe = (IProgramElement) fileMap.get(filePath); - if (deletedFiles.contains(getCanonicalFilePath(ipe))) { + for (Map.Entry<String, IProgramElement> entry : fileMap.entrySet()) { + String filePath = entry.getKey(); + if (deletedFiles.contains(getCanonicalFilePath(entry.getValue()))) { forRemoval.add(filePath); } } - for (Iterator iter = forRemoval.iterator(); iter.hasNext();) { - String filePath = (String) iter.next(); + for (String filePath : forRemoval) { fileMap.remove(filePath); } } diff --git a/asm/src/org/aspectj/asm/internal/NameConvertor.java b/asm/src/org/aspectj/asm/internal/NameConvertor.java index 854039eff..340d41586 100644 --- a/asm/src/org/aspectj/asm/internal/NameConvertor.java +++ b/asm/src/org/aspectj/asm/internal/NameConvertor.java @@ -142,12 +142,16 @@ public class NameConvertor { */ public static char[] createShortName(char[] c, boolean haveFullyQualifiedAtLeastOneThing, boolean needsFullyQualifiedFirstEntry) { if (c[0] == '[') { - char[] ret = CharOperation.concat(new char[] { '\\', '[' }, createShortName(CharOperation.subarray(c, 1, c.length), - haveFullyQualifiedAtLeastOneThing, needsFullyQualifiedFirstEntry)); + char[] ret = CharOperation.concat( + new char[] { '\\', '[' }, + createShortName(CharOperation.subarray(c, 1, c.length), haveFullyQualifiedAtLeastOneThing, + needsFullyQualifiedFirstEntry)); return ret; } else if (c[0] == '+') { - char[] ret = CharOperation.concat(new char[] { '+' }, createShortName(CharOperation.subarray(c, 1, c.length), - haveFullyQualifiedAtLeastOneThing, needsFullyQualifiedFirstEntry)); + char[] ret = CharOperation.concat( + new char[] { '+' }, + createShortName(CharOperation.subarray(c, 1, c.length), haveFullyQualifiedAtLeastOneThing, + needsFullyQualifiedFirstEntry)); return ret; } else if (c[0] == '*') { return c; // c is *>; @@ -195,8 +199,8 @@ public class NameConvertor { BACKSLASH_LESSTHAN); return CharOperation.concat(inclLT, createShortName(second, true, false)); } else if (smallest == gt) { - char[] inclLT = CharOperation.concat(createShortName(first, haveFullyQualifiedAtLeastOneThing, - needsFullyQualifiedFirstEntry), GREATER_THAN); + char[] inclLT = CharOperation.concat( + createShortName(first, haveFullyQualifiedAtLeastOneThing, needsFullyQualifiedFirstEntry), GREATER_THAN); return CharOperation.concat(inclLT, createShortName(second, true, false)); } else { // if c = 'Ljava/lang/Sting;LMyClass;' then first = 'Ljava/lang/String' @@ -212,8 +216,6 @@ public class NameConvertor { // return getTypeName(name, false); // } - private static final char[] WILDCARD = new char[] { '+' }; - /** * Convert a typename into its handle form. There are various cases to consider here - many are discussed in pr249216. The flag * allreadyFQd indicates if we've already included a fq'd name in what we are creating - if we have then further references diff --git a/asm/src/org/aspectj/asm/internal/ProgramElement.java b/asm/src/org/aspectj/asm/internal/ProgramElement.java index 49811c8e6..1061e5b8c 100644 --- a/asm/src/org/aspectj/asm/internal/ProgramElement.java +++ b/asm/src/org/aspectj/asm/internal/ProgramElement.java @@ -53,25 +53,22 @@ public class ProgramElement implements IProgramElement { protected String name; private Kind kind; protected IProgramElement parent = null; - protected List children = Collections.EMPTY_LIST; + protected List<IProgramElement> children = Collections.emptyList(); public Map kvpairs = Collections.EMPTY_MAP; protected ISourceLocation sourceLocation = null; public int modifiers; private String handle = null; - // --- ctors - public AsmManager getModel() { return asm; } /** Used during de-externalization */ public ProgramElement() { - int stop = 1; } /** Use to create program element nodes that do not correspond to source locations */ - public ProgramElement(AsmManager asm, String name, Kind kind, List children) { + public ProgramElement(AsmManager asm, String name, Kind kind, List<IProgramElement> children) { this.asm = asm; if (asm == null && !name.equals("<build to view structure>")) { throw new RuntimeException(); @@ -84,7 +81,7 @@ public class ProgramElement implements IProgramElement { } public ProgramElement(AsmManager asm, String name, IProgramElement.Kind kind, ISourceLocation sourceLocation, int modifiers, - String comment, List children) { + String comment, List<IProgramElement> children) { this(asm, name, kind, children); this.sourceLocation = sourceLocation; setFormalComment(comment); @@ -277,8 +274,8 @@ public class ProgramElement implements IProgramElement { return toLabelString(); } - private static List genModifiers(int modifiers) { - List modifiersList = new ArrayList(); + private static List<IProgramElement.Modifiers> genModifiers(int modifiers) { + List<IProgramElement.Modifiers> modifiersList = new ArrayList<IProgramElement.Modifiers>(); if ((modifiers & AccStatic) != 0) { modifiersList.add(IProgramElement.Modifiers.STATIC); } @@ -448,19 +445,19 @@ public class ProgramElement implements IProgramElement { return children; } - public void setChildren(List children) { + public void setChildren(List<IProgramElement> children) { this.children = children; if (children == null) { return; } - for (Iterator it = children.iterator(); it.hasNext();) { - ((IProgramElement) it.next()).setParent(this); + for (Iterator<IProgramElement> it = children.iterator(); it.hasNext();) { + (it.next()).setParent(this); } } public void addChild(IProgramElement child) { if (children == null || children == Collections.EMPTY_LIST) { - children = new ArrayList(); + children = new ArrayList<IProgramElement>(); } children.add(child); child.setParent(this); @@ -468,7 +465,7 @@ public class ProgramElement implements IProgramElement { public void addChild(int position, IProgramElement child) { if (children == null || children == Collections.EMPTY_LIST) { - children = new ArrayList(); + children = new ArrayList<IProgramElement>(); } children.add(position, child); child.setParent(this); @@ -640,12 +637,12 @@ public class ProgramElement implements IProgramElement { this.handle = handle; } - public List getParameterNames() { - List parameterNames = (List) kvpairs.get("parameterNames"); + public List<String> getParameterNames() { + List<String> parameterNames = (List<String>) kvpairs.get("parameterNames"); return parameterNames; } - public void setParameterNames(List list) { + public void setParameterNames(List<String> list) { if (list == null || list.size() == 0) { return; } @@ -656,21 +653,21 @@ public class ProgramElement implements IProgramElement { // parameterNames = list; } - public List getParameterTypes() { - List l = getParameterSignatures(); + public List<char[]> getParameterTypes() { + List<char[]> l = getParameterSignatures(); if (l == null || l.isEmpty()) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } - List params = new ArrayList(); - for (Iterator iter = l.iterator(); iter.hasNext();) { - char[] param = (char[]) iter.next(); + List<char[]> params = new ArrayList<char[]>(); + for (Iterator<char[]> iter = l.iterator(); iter.hasNext();) { + char[] param = iter.next(); params.add(NameConvertor.convertFromSignature(param)); } return params; } - public List getParameterSignatures() { - List parameters = (List) kvpairs.get("parameterSigs"); + public List<char[]> getParameterSignatures() { + List<char[]> parameters = (List<char[]>) kvpairs.get("parameterSigs"); return parameters; } diff --git a/asm/src/org/aspectj/asm/internal/Relationship.java b/asm/src/org/aspectj/asm/internal/Relationship.java index 48f689905..8bd4a7e66 100644 --- a/asm/src/org/aspectj/asm/internal/Relationship.java +++ b/asm/src/org/aspectj/asm/internal/Relationship.java @@ -1,5 +1,5 @@ /* ******************************************************************* - * Copyright (c) 2003 Contributors. + * Copyright (c) 2003,2010 Contributors * All rights reserved. * This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 @@ -18,39 +18,29 @@ import org.aspectj.asm.IRelationship; /** * @author Mik Kersten + * @author Andy Clement */ public class Relationship implements IRelationship { - + private static final long serialVersionUID = 3855166397957609120L; private String name; private Kind kind; private boolean isAffects; private String sourceHandle; - private List targets; + private List<String> targets; private boolean hasRuntimeTest; - - public Relationship( - String name, - Kind kind, - String sourceHandle, - List targets, - boolean runtimeTest) { - + + public Relationship(String name, Kind kind, String sourceHandle, List<String> targets, boolean runtimeTest) { this.name = name; - this.isAffects = - name.equals("advises") || - name.equals("declares on") || - name.equals("softens") || - name.equals("matched by") || - name.equals("declared on") || - name.equals("annotates"); + this.isAffects = name.equals("advises") || name.equals("declares on") || name.equals("softens") + || name.equals("matched by") || name.equals("declared on") || name.equals("annotates"); this.kind = kind; this.sourceHandle = sourceHandle; this.targets = targets; this.hasRuntimeTest = runtimeTest; - } - + } + public String getName() { return name; } @@ -61,29 +51,31 @@ public class Relationship implements IRelationship { public String toString() { return name; - } - + } + public String getSourceHandle() { return sourceHandle; } // TODO should be a Set and not a list - public List getTargets() { + public List<String> getTargets() { return targets; } - + public void addTarget(String handle) { - if (targets.contains(handle)) return; + if (targets.contains(handle)) { + return; + } targets.add(handle); } - + public boolean hasRuntimeTest() { return hasRuntimeTest; } - + /** - * Return the direction of the relationship. It might be affects or affected-by. - * The direction enables the incremental model repair code to do the right thing. + * Return the direction of the relationship. It might be affects or affected-by. The direction enables the incremental model + * repair code to do the right thing. * * @return true if is an affects relationship: advises/declareson/softens/matchedby/declaredon/annotates */ diff --git a/asm/src/org/aspectj/asm/internal/RelationshipMap.java b/asm/src/org/aspectj/asm/internal/RelationshipMap.java index 87d035112..2f9be0d09 100644 --- a/asm/src/org/aspectj/asm/internal/RelationshipMap.java +++ b/asm/src/org/aspectj/asm/internal/RelationshipMap.java @@ -1,5 +1,5 @@ /* ******************************************************************* - * Copyright (c) 2003 Contributors. + * Copyright (c) 2003,2010 Contributors * All rights reserved. * This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 @@ -8,6 +8,7 @@ * * Contributors: * Mik Kersten initial implementation + * Andy Clement * ******************************************************************/ package org.aspectj.asm.internal; @@ -21,16 +22,14 @@ import java.util.Set; import org.aspectj.asm.IHierarchy; import org.aspectj.asm.IProgramElement; import org.aspectj.asm.IRelationship; -import org.aspectj.asm.IRelationshipMap; import org.aspectj.asm.IRelationship.Kind; +import org.aspectj.asm.IRelationshipMap; /** - * TODO: add a remove, and a clear all - * * @author Mik Kersten - * + * @author Andy Clement */ -public class RelationshipMap extends HashMap implements IRelationshipMap { +public class RelationshipMap extends HashMap<String, List<IRelationship>> implements IRelationshipMap { private static final long serialVersionUID = 496638323566589643L; @@ -50,8 +49,8 @@ public class RelationshipMap extends HashMap implements IRelationshipMap { // this.hierarchy = hierarchy; } - public List get(String handle) { - List relationships = (List) super.get(handle); + public List<IRelationship> get(String handle) { + List<IRelationship> relationships = super.get(handle); if (relationships == null) { return null; } else { @@ -59,25 +58,26 @@ public class RelationshipMap extends HashMap implements IRelationshipMap { } } - public List get(IProgramElement source) { + public List<IRelationship> get(IProgramElement source) { return get(source.getHandleIdentifier()); } public IRelationship get(String source, IRelationship.Kind kind, String relationshipName, boolean runtimeTest, boolean createIfMissing) { - List relationships = get(source); + List<IRelationship> relationships = get(source); if (relationships == null) { - if (!createIfMissing) + if (!createIfMissing) { return null; - relationships = new ArrayList(); - IRelationship rel = new Relationship(relationshipName, kind, source, new ArrayList(), runtimeTest); + } + relationships = new ArrayList<IRelationship>(); + IRelationship rel = new Relationship(relationshipName, kind, source, new ArrayList<String>(), runtimeTest); relationships.add(rel); super.put(source, relationships); return rel; } else { - for (Iterator it = relationships.iterator(); it.hasNext();) { - IRelationship curr = (IRelationship) it.next(); + for (Iterator<IRelationship> it = relationships.iterator(); it.hasNext();) { + IRelationship curr = it.next(); if (curr.getKind() == kind && curr.getName().equals(relationshipName) && curr.hasRuntimeTest() == runtimeTest) { return curr; } @@ -85,7 +85,7 @@ public class RelationshipMap extends HashMap implements IRelationshipMap { if (createIfMissing) { // At this point we did find some relationships for 'source' but not one that looks like what we are // after (either the kind or the name or the dynamictests setting don't match) - IRelationship rel = new Relationship(relationshipName, kind, source, new ArrayList(), runtimeTest); + IRelationship rel = new Relationship(relationshipName, kind, source, new ArrayList<String>(), runtimeTest); relationships.add(rel); return rel; } @@ -103,7 +103,7 @@ public class RelationshipMap extends HashMap implements IRelationshipMap { } public boolean remove(String source, IRelationship relationship) { - List list = (List) super.get(source); + List<IRelationship> list = super.get(source); if (list != null) { return list.remove(relationship); // boolean matched = false; @@ -123,25 +123,19 @@ public class RelationshipMap extends HashMap implements IRelationshipMap { super.remove(source); } - public Object put(Object o, Object p) { - - return super.put(o, p); - } - public void put(String source, IRelationship relationship) { // System.err.println(">> for: " + source + ", put::" + relationship); - List list = (List) super.get(source); + List<IRelationship> list = super.get(source); if (list == null) { - list = new ArrayList(); + list = new ArrayList<IRelationship>(); list.add(relationship); super.put(source, list); } else { boolean matched = false; - for (Iterator it = list.iterator(); it.hasNext();) { - IRelationship curr = (IRelationship) it.next(); + for (IRelationship curr : list) { if (curr.getName().equals(relationship.getName()) && curr.getKind() == relationship.getKind()) { curr.getTargets().addAll(relationship.getTargets()); matched = true; @@ -151,8 +145,9 @@ public class RelationshipMap extends HashMap implements IRelationshipMap { // bug? System.err.println("matched = true"); } - if (matched) + if (matched) { list.add(relationship); // Is this a bug, will it give us double entries? + } } } @@ -164,7 +159,7 @@ public class RelationshipMap extends HashMap implements IRelationshipMap { super.clear(); } - public Set getEntries() { + public Set<String> getEntries() { return keySet(); } |