]> source.dussan.org Git - aspectj.git/commitdiff
Reimplemented ASM API as described in bug "41254: revise asm and create interfaces...
authormkersten <mkersten>
Fri, 8 Aug 2003 11:02:53 +0000 (11:02 +0000)
committermkersten <mkersten>
Fri, 8 Aug 2003 11:02:53 +0000 (11:02 +0000)
76 files changed:
ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserManager.java
ajbrowser/src/org/aspectj/tools/ajbrowser/TopFrame.java
ajde/src/org/aspectj/ajde/internal/LstBuildConfigManager.java
ajde/src/org/aspectj/ajde/ui/AbstractIconRegistry.java
ajde/src/org/aspectj/ajde/ui/BuildConfigModel.java
ajde/src/org/aspectj/ajde/ui/BuildConfigNode.java
ajde/src/org/aspectj/ajde/ui/StructureModelUtil.java
ajde/src/org/aspectj/ajde/ui/StructureSearchManager.java
ajde/src/org/aspectj/ajde/ui/StructureView.java
ajde/src/org/aspectj/ajde/ui/StructureViewManager.java
ajde/src/org/aspectj/ajde/ui/StructureViewNode.java
ajde/src/org/aspectj/ajde/ui/StructureViewNodeFactory.java
ajde/src/org/aspectj/ajde/ui/StructureViewProperties.java
ajde/src/org/aspectj/ajde/ui/internal/NavigationHistoryModel.java
ajde/src/org/aspectj/ajde/ui/internal/TreeStructureViewBuilder.java
ajde/src/org/aspectj/ajde/ui/swing/AjdeUIManager.java
ajde/src/org/aspectj/ajde/ui/swing/BrowserStructureViewToolPanel.java
ajde/src/org/aspectj/ajde/ui/swing/BrowserView.java
ajde/src/org/aspectj/ajde/ui/swing/BrowserViewManager.java
ajde/src/org/aspectj/ajde/ui/swing/BrowserViewTreeListener.java
ajde/src/org/aspectj/ajde/ui/swing/BuildConfigPopupMenu.java
ajde/src/org/aspectj/ajde/ui/swing/IconRegistry.java
ajde/src/org/aspectj/ajde/ui/swing/PointcutWizard.java
ajde/src/org/aspectj/ajde/ui/swing/SimpleStructureViewToolPanel.java
ajde/src/org/aspectj/ajde/ui/swing/StructureTreeManager.java
ajde/src/org/aspectj/ajde/ui/swing/StructureViewPanel.java
ajde/src/org/aspectj/ajde/ui/swing/SwingTreeViewNode.java
ajde/src/org/aspectj/ajde/ui/swing/SwingTreeViewNodeFactory.java
ajde/src/org/aspectj/ajde/ui/swing/SwingTreeViewNodeRenderer.java
ajde/src/org/aspectj/ajde/ui/swing/TreeViewBuildConfigEditor.java
ajde/testdata/examples/coverage/ModelCoverage.java
ajde/testdata/examples/coverage/coverage.lst
ajde/testdata/examples/coverage/pkg/InPackage.java [new file with mode: 0644]
ajde/testsrc/org/aspectj/ajde/AjdeTests.java
ajde/testsrc/org/aspectj/ajde/AsmDeclarationsTest.java
ajde/testsrc/org/aspectj/ajde/AsmRelationshipsTest.java [new file with mode: 0644]
ajde/testsrc/org/aspectj/ajde/NullIdeErrorHandler.java [new file with mode: 0644]
ajde/testsrc/org/aspectj/ajde/NullIdeManager.java
ajde/testsrc/org/aspectj/ajde/NullIdeProgressMonitor.java [new file with mode: 0644]
ajde/testsrc/org/aspectj/ajde/NullIdeTaskListManager.java
ajde/testsrc/org/aspectj/ajde/NullIdeUIAdapter.java
ajde/testsrc/org/aspectj/ajde/StructureModelRegressionTest.java
ajde/testsrc/org/aspectj/ajde/StructureModelTest.java
ajde/testsrc/org/aspectj/ajde/ui/StructureModelUtilTest.java
ajde/testsrc/org/aspectj/ajde/ui/StructureSearchManagerTest.java
ajde/testsrc/org/aspectj/ajde/ui/StructureViewManagerTest.java
asm/src/org/aspectj/asm/AdviceAssociation.java [deleted file]
asm/src/org/aspectj/asm/Association.java [deleted file]
asm/src/org/aspectj/asm/HierarchyWalker.java [new file with mode: 0644]
asm/src/org/aspectj/asm/IProgramElement.java [new file with mode: 0644]
asm/src/org/aspectj/asm/IRelationship.java [new file with mode: 0644]
asm/src/org/aspectj/asm/IStructureModelListener.java [new file with mode: 0644]
asm/src/org/aspectj/asm/InheritanceAssociation.java [deleted file]
asm/src/org/aspectj/asm/IntroductionAssociation.java [deleted file]
asm/src/org/aspectj/asm/LinkNode.java [deleted file]
asm/src/org/aspectj/asm/ModelWalker.java [deleted file]
asm/src/org/aspectj/asm/ProgramElementNode.java [deleted file]
asm/src/org/aspectj/asm/ReferenceAssociation.java [deleted file]
asm/src/org/aspectj/asm/Relation.java [deleted file]
asm/src/org/aspectj/asm/RelationNode.java [deleted file]
asm/src/org/aspectj/asm/StructureModel.java
asm/src/org/aspectj/asm/StructureModelListener.java [deleted file]
asm/src/org/aspectj/asm/StructureModelManager.java
asm/src/org/aspectj/asm/StructureNode.java [deleted file]
asm/src/org/aspectj/asm/StructureNodeFactory.java [deleted file]
asm/src/org/aspectj/asm/internal/ProgramElement.java [new file with mode: 0644]
asm/src/org/aspectj/asm/internal/Relationship.java [new file with mode: 0644]
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java [deleted file]
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmHierarchyBuilder.java [new file with mode: 0644]
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmNodeFormatter.java
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/EmacsStructureModelManager.java
org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/core/builder/AsmBuilderTest.java
testing/src/org/aspectj/testing/ajde/CompileCommand.java
weaver/src/org/aspectj/weaver/AsmAdaptor.java

index 7af4f21990b95c76d0318b521197c0e297c5e2d2..d5ca9956fcd9fcea8a4cd80d667c55343c964bf1 100644 (file)
@@ -46,7 +46,7 @@ public class BrowserManager {
     
     private static TopFrame topFrame = null;
     
-       public final StructureModelListener VIEW_LISTENER = new StructureModelListener() {
+       public final IStructureModelListener VIEW_LISTENER = new IStructureModelListener() {
                public void modelUpdated(StructureModel model) {                
                        FileStructureView fsv = Ajde.getDefault().getStructureViewManager().getDefaultFileView();
                        if (fsv != null) {
index e97ae9dd1a60d60cb888f6ab05e814f6944dad1e..5fa109e6a062e33bd12eede3aba8422b549b4cb0 100644 (file)
@@ -24,7 +24,7 @@ import javax.swing.filechooser.FileFilter;
 
 import org.aspectj.ajde.Ajde;
 import org.aspectj.ajde.ui.swing.*;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * UI for standalone operation.
@@ -123,7 +123,7 @@ public class TopFrame extends JFrame {
             projectDebug_menuItem.setIcon(AjdeUIManager.getDefault().getIconRegistry().getDebugIcon());
 
             this.setJMenuBar(menuBar);
-            this.setIconImage(((ImageIcon)AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.ADVICE)).getImage());
+            this.setIconImage(((ImageIcon)AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.ADVICE)).getImage());
             this.setLocation(75, 10);
             this.setSize(900, 650);
             this.setTitle(BrowserManager.TITLE);
@@ -381,7 +381,7 @@ public class TopFrame extends JFrame {
                 editConfig_button_actionPerformed(e);
             }
         });
-        editConfig_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.FILE_LST));
+        editConfig_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.FILE_LST));
         editConfig_button.setText("Edit Config");
         editConfig_button.setToolTipText("Edit Config...");
         editConfig_button.setPreferredSize(new Dimension(80, 20));
index f6e23cf61ac53bf8a7dcad37db94dacfc35fed10..779a8350e58fdd8c18be2012f657bc96906d0867 100644 (file)
  
 package org.aspectj.ajde.internal;
 
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FilenameFilter;
+import java.io.*;
 import java.util.*;
 
-import org.aspectj.ajde.Ajde;
-import org.aspectj.ajde.BuildConfigListener;
-import org.aspectj.ajde.BuildConfigManager;
-import org.aspectj.ajde.ui.BuildConfigModel;
-import org.aspectj.ajde.ui.BuildConfigNode;
-import org.aspectj.asm.StructureNode;
-import org.aspectj.bridge.IMessage;
-import org.aspectj.bridge.Message;
-import org.aspectj.bridge.SourceLocation;
+import org.aspectj.ajde.*;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.bridge.*;
 import org.aspectj.util.ConfigParser;
 
 /**
@@ -247,7 +239,7 @@ public class LstBuildConfigManager implements BuildConfigManager {
                }
                
                for (Iterator it = nodesToRemove.iterator(); it.hasNext(); ) {
-                       StructureNode currNode = (StructureNode)it.next();
+                       BuildConfigNode currNode = (BuildConfigNode)it.next();
                        node.removeChild(currNode);     
                }
                return node.getChildren().size() > 0;
index 1b281d1edb2809bd15aee5213fd51dc84793f348..6e4a32b416ed6b15f0c46c77ea7fd7bfc67d14f1 100644 (file)
 
 package org.aspectj.ajde.ui;
 
-import org.aspectj.asm.AdviceAssociation;
-import org.aspectj.asm.InheritanceAssociation;
-import org.aspectj.asm.IntroductionAssociation;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.Relation;
+import org.aspectj.asm.*;
 
 /**
  * Uses the factory pattern.
@@ -62,12 +58,12 @@ public abstract class AbstractIconRegistry {
     protected final AbstractIcon RELATION_REFERENCE_FORWARD = createIcon(STRUCTURE_PATH + "referenceForward.gif");
     protected final AbstractIcon RELATION_REFERENCE_BACK = createIcon(STRUCTURE_PATH + "referenceBack.gif");
 
-       public AbstractIcon getRelationIcon(Relation relation) {
-               if (relation.getAssociationName().equals(AdviceAssociation.NAME)) {
+       public AbstractIcon getRelationIcon(IRelationship.Kind relationship) {
+               if (relationship == IRelationship.Kind.ADVICE) {
                        return RELATION_ADVICE_FORWARD;
-               } else if (relation.getAssociationName().equals(IntroductionAssociation.NAME)) {
+               } else if (relationship == IRelationship.Kind.DECLARE) {
                        return RELATION_ADVICE_FORWARD;
-               } else if (relation.getAssociationName().equals(InheritanceAssociation.NAME)) {
+               } else if (relationship == IRelationship.Kind.INHERITANCE) {
                        return RELATION_INHERITANCE_FORWARD;
                } else {
                        return RELATION_REFERENCE_FORWARD;
@@ -77,8 +73,8 @@ public abstract class AbstractIconRegistry {
        /**
         * @return      null if the kind could not be resolved
         */
-       protected AbstractIcon getStructureIcon(ProgramElementNode.Kind kind, ProgramElementNode.Accessibility accessibility) {
-               return getStructureIcon(kind, ProgramElementNode.Accessibility.PUBLIC);
+       protected AbstractIcon getStructureIcon(IProgramElement.Kind kind, IProgramElement.Accessibility accessibility) {
+               return getStructureIcon(kind, IProgramElement.Accessibility.PUBLIC);
        }       
        
        /**
@@ -86,56 +82,56 @@ public abstract class AbstractIconRegistry {
         * 
         * @return      null if the kind could not be resolved
         */
-       public AbstractIcon getStructureIcon(ProgramElementNode.Kind kind) { 
-               if (kind == ProgramElementNode.Kind.PROJECT) {
+       public AbstractIcon getStructureIcon(IProgramElement.Kind kind) { 
+               if (kind == IProgramElement.Kind.PROJECT) {
                        return PROJECT;
-               } else if (kind == ProgramElementNode.Kind.PACKAGE) {
+               } else if (kind == IProgramElement.Kind.PACKAGE) {
                        return PACKAGE;
-               } else if (kind == ProgramElementNode.Kind.FILE) {
+               } else if (kind == IProgramElement.Kind.FILE) {
                        return FILE;
-               } else if (kind == ProgramElementNode.Kind.FILE_JAVA) {
+               } else if (kind == IProgramElement.Kind.FILE_JAVA) {
                        return FILE_JAVA;
-               } else if (kind == ProgramElementNode.Kind.FILE_ASPECTJ) {
+               } else if (kind == IProgramElement.Kind.FILE_ASPECTJ) {
                        return FILE_ASPECTJ;
-               } else if (kind == ProgramElementNode.Kind.FILE_LST) {
+               } else if (kind == IProgramElement.Kind.FILE_LST) {
                        return FILE_LST;
-               } else if (kind == ProgramElementNode.Kind.CLASS) {
+               } else if (kind == IProgramElement.Kind.CLASS) {
                        return CLASS;
-               } else if (kind == ProgramElementNode.Kind.INTERFACE) {
+               } else if (kind == IProgramElement.Kind.INTERFACE) {
                        return INTERFACE;
-               } else if (kind == ProgramElementNode.Kind.ASPECT) {
+               } else if (kind == IProgramElement.Kind.ASPECT) {
                        return ASPECT;
-               } else if (kind == ProgramElementNode.Kind.INITIALIZER) {
+               } else if (kind == IProgramElement.Kind.INITIALIZER) {
                        return INITIALIZER;
-               } else if (kind == ProgramElementNode.Kind.INTER_TYPE_CONSTRUCTOR) {
+               } else if (kind == IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR) {
                        return INTRODUCTION;
-               } else if (kind == ProgramElementNode.Kind.INTER_TYPE_FIELD) {
+               } else if (kind == IProgramElement.Kind.INTER_TYPE_FIELD) {
                        return INTRODUCTION;
-               } else if (kind == ProgramElementNode.Kind.INTER_TYPE_METHOD) {
+               } else if (kind == IProgramElement.Kind.INTER_TYPE_METHOD) {
                        return INTRODUCTION;
-               } else if (kind == ProgramElementNode.Kind.CONSTRUCTOR) {
+               } else if (kind == IProgramElement.Kind.CONSTRUCTOR) {
                        return CONSTRUCTOR;
-               } else if (kind == ProgramElementNode.Kind.METHOD) {
+               } else if (kind == IProgramElement.Kind.METHOD) {
                        return METHOD;
-               } else if (kind == ProgramElementNode.Kind.FIELD) {
+               } else if (kind == IProgramElement.Kind.FIELD) {
                        return FIELD;
-               } else if (kind == ProgramElementNode.Kind.POINTCUT) {
+               } else if (kind == IProgramElement.Kind.POINTCUT) {
                        return POINTCUT;
-               } else if (kind == ProgramElementNode.Kind.ADVICE) {
+               } else if (kind == IProgramElement.Kind.ADVICE) {
                        return ADVICE;
-               } else if (kind == ProgramElementNode.Kind.DECLARE_PARENTS) {
+               } else if (kind == IProgramElement.Kind.DECLARE_PARENTS) {
                        return DECLARE_PARENTS;
-               } else if (kind == ProgramElementNode.Kind.DECLARE_WARNING) {
+               } else if (kind == IProgramElement.Kind.DECLARE_WARNING) {
                        return DECLARE_WARNING;
-               } else if (kind == ProgramElementNode.Kind.DECLARE_ERROR) {
+               } else if (kind == IProgramElement.Kind.DECLARE_ERROR) {
                        return DECLARE_ERROR;
-               } else if (kind == ProgramElementNode.Kind.DECLARE_SOFT) {
+               } else if (kind == IProgramElement.Kind.DECLARE_SOFT) {
                        return DECLARE_SOFT;
-               } else if (kind == ProgramElementNode.Kind.DECLARE_PRECEDENCE) {
+               } else if (kind == IProgramElement.Kind.DECLARE_PRECEDENCE) {
                        return DECLARE_SOFT;
-               } else if (kind == ProgramElementNode.Kind.CODE) {
+               } else if (kind == IProgramElement.Kind.CODE) {
                        return CODE;
-               } else if (kind == ProgramElementNode.Kind.ERROR) {
+               } else if (kind == IProgramElement.Kind.ERROR) {
                        return ERROR;
                } else {
                        System.err.println("AJDE Message: unresolved icon kind " + kind);
index 1687e69eec58148cf6d4e6f3d1de014d3a7d1575..fdd00fb762d089cf2ef4814f34228f9f06bd4153 100644 (file)
@@ -24,7 +24,9 @@ import org.aspectj.asm.StructureModel;
 /**
  * @author Mik Kersten
  */
-public class BuildConfigModel extends StructureModel {
+public class BuildConfigModel {
+
+       private BuildConfigNode root = null;
 
        private String sourceFile; 
         
@@ -94,6 +96,15 @@ public class BuildConfigModel extends StructureModel {
        public void setSourceFile(String sourceFile) {
                this.sourceFile = sourceFile;
        }
+
+       public BuildConfigNode getRoot() {
+               return root;
+       }
+
+       public void setRoot(BuildConfigNode node) {
+               root = node;
+       }
+
 }
 
 
index 5c28c7e43ace85fda31c58ac9eaf59636827c640..eff97262b1017c2cb98cb36cd2a1d88c60ae8ef2 100644 (file)
 
 package org.aspectj.ajde.ui;
 
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.util.List;
+import java.io.*;
+import java.util.*;
 
-import org.aspectj.asm.StructureNode;
+import org.aspectj.bridge.*;
 
 /**
  * @author Mik Kersten
+ * 
+ * TODO: clean-up after merging of org.aspectj.asm.StructureNode
  */
-public class BuildConfigNode extends StructureNode {
+public class BuildConfigNode {
+
+
+
+       protected BuildConfigNode parent = null;
+       protected String name = "";
+       protected Kind kind;
+       // children.listIterator() should support remove() operation
+       protected List children = new ArrayList();
+       protected IMessage message = null;
+       protected ISourceLocation sourceLocation = null;
+
+       /**
+        * Used during serialization.
+        */
+       public BuildConfigNode() { }
+
+//     public BuildConfigNode(String name, String kind, String resourcePath, List children) {
+//             this(name, kind, children);
+//             this.resourcePath = resourcePath;
+//     }
 
-       private String resourcePath;
-       private Kind kind;
-       private boolean isActive = true;
-               
        public BuildConfigNode(String name, Kind kind, String resourcePath) {   
-               super(name, kind.toString());
+               this(name, kind);
                this.kind = kind;
                this.resourcePath = resourcePath;       
        }
 
-       public BuildConfigNode(String name, String kind, String resourcePath, List children) {
-               super(name, kind, children);
-               this.resourcePath = resourcePath;
+//     public BuildConfigNode(String name, Kind kind, List children) {
+//             this.name = name;
+//             this.kind = kind;
+//             if (children != null) {
+//                     this.children = children;
+//             }
+//             setParents();
+//     }
+
+       public BuildConfigNode(String name, Kind kind) {
+               this.name = name;
+               this.kind = kind;
+       }
+
+       public String toString() {
+               return  name;
+       }
+
+       public List getChildren() {
+               return children;
+       }
+
+       public void addChild(BuildConfigNode child) {
+               if (children == null) {
+                       children = new ArrayList();
+               }
+               children.add(child);
+               child.setParent(this);
+       }
+    
+       public void addChild(int position, BuildConfigNode child) {
+               if (children == null) {
+                       children = new ArrayList();
+               }
+               children.add(position, child);
+               child.setParent(this);
+       }
+    
+       public boolean removeChild(BuildConfigNode child) {
+               child.setParent(null);
+               return children.remove(child);  
+       }
+
+       /**
+        * Comparison is string-name based only.
+        */
+       public int compareTo(Object o) throws ClassCastException {
+               if (this == o) {
+                       return 0;
+               } else {
+                       BuildConfigNode sn = (BuildConfigNode)o;
+                       return this.getName().compareTo(sn.getName());
+               }
+       }
+
+       public String getName() {
+               return name;
        }
+
+       public ISourceLocation getSourceLocation() {
+               return sourceLocation;
+       }
+
+       public void setSourceLocation(ISourceLocation sourceLocation) {
+               this.sourceLocation = sourceLocation;
+       }
+
+       public IMessage getMessage() {
+               return message;
+       }
+
+       public void setMessage(IMessage message) {
+               this.message = message;
+       }
+
+       public BuildConfigNode getParent() {
+               return parent;
+       }
+
+       public void setParent(BuildConfigNode parent) {
+               this.parent = parent;
+       }
+
+       private void setParents() {
+               if (children == null) return;
+               for (Iterator it = children.iterator(); it.hasNext(); ) {
+                       ((BuildConfigNode)it.next()).setParent(this);   
+               }       
+       }
+
+       public void setName(String string) {
+               name = string;
+       }
+       
+
+       private String resourcePath;
+       private boolean isActive = true;
        
        public String getResourcePath() {
                return resourcePath;
index 81d33f75c10cce5c321d6b28a36e717f7ebc75ff..1b4a1a9d1880a269cab316bf4f6b841a52841447 100644 (file)
 
 package org.aspectj.ajde.ui;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
+import java.util.*;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.RelationNode;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureModelManager;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.*;
 
 /**
  * Prototype functionality for package view clients.
@@ -63,15 +48,15 @@ public class StructureModelUtil {
                        Object key = it.next();
                        List annotations = (List) annotationsMap.get(key);
                        for (Iterator it2 = annotations.iterator(); it2.hasNext();) {
-                               ProgramElementNode node = (ProgramElementNode) it2.next();
+                               IProgramElement node = (IProgramElement) it2.next();
 
                                List relations = node.getRelations();
 
                                for (Iterator it3 = relations.iterator(); it3.hasNext();) {
-                                       RelationNode relationNode = (RelationNode) it3.next();
+                                       IRelationship relationNode = (IRelationship) it3.next();
 
                                        if (relationNode.getKind().equals("Advice")) {
-                                               List children = relationNode.getChildren();
+                                               List children = relationNode.getTargets();
 
                                                List aspects = new Vector();
 
@@ -80,19 +65,19 @@ public class StructureModelUtil {
                                                        ) {
                                                        Object object = it4.next();
 
-                                                       if (object instanceof LinkNode) {
-                                                               ProgramElementNode pNode =
-                                                                       ((LinkNode) object).getProgramElementNode();
-
-                                                               if (pNode.getProgramElementKind()
-                                                                       == ProgramElementNode.Kind.ADVICE) {
-
-                                                                       StructureNode theAspect = pNode.getParent();
-
-                                                                       aspects.add(theAspect);
-
-                                                               }
-                                                       }
+//                                                     if (object instanceof LinkNode) {
+//                                                             IProgramElement pNode =
+//                                                                     ((LinkNode) object).getProgramElementNode();
+//
+//                                                             if (pNode.getProgramElementKind()
+//                                                                     == IProgramElement.Kind.ADVICE) {
+//
+//                                                                     IProgramElement theAspect = pNode.getParent();
+//
+//                                                                     aspects.add(theAspect);
+//
+//                                                             }
+//                                                     }
                                                }
                                                if (!aspects.isEmpty()) {
                                                        aspectMap.put(key, aspects);
@@ -111,11 +96,11 @@ public class StructureModelUtil {
         * 
         * @return              the set of aspects with advice that affects the specified package
         */
-       public static Set getAspectsAffectingPackage(ProgramElementNode packageNode) {
+       public static Set getAspectsAffectingPackage(IProgramElement packageNode) {
                List files = StructureModelUtil.getFilesInPackage(packageNode);
                Set aspects = new HashSet();
                for (Iterator it = files.iterator(); it.hasNext();) {
-                       ProgramElementNode fileNode = (ProgramElementNode) it.next();
+                       IProgramElement fileNode = (IProgramElement) it.next();
                        Map adviceMap =
                                getLinesToAspectMap(
                                        fileNode.getSourceLocation().getSourceFile().getAbsolutePath());
@@ -135,20 +120,20 @@ public class StructureModelUtil {
                        return null;
                } else {
                        return getPackagesHelper(
-                               (ProgramElementNode) model.getRoot(),
-                               ProgramElementNode.Kind.PACKAGE,
+                               (IProgramElement) model.getRoot(),
+                               IProgramElement.Kind.PACKAGE,
                                null,
                                packages);
                }
        }
 
        private static List getPackagesHelper(
-               ProgramElementNode node,
-               ProgramElementNode.Kind kind,
+               IProgramElement node,
+               IProgramElement.Kind kind,
                String prename,
                List matches) {
 
-               if (kind == null || node.getProgramElementKind().equals(kind)) {
+               if (kind == null || node.getKind().equals(kind)) {
                        if (prename == null) {
                                prename = new String(node.toString());
                        } else {
@@ -162,10 +147,10 @@ public class StructureModelUtil {
                }
 
                for (Iterator it = node.getChildren().iterator(); it.hasNext();) {
-                       StructureNode nextNode = (StructureNode) it.next();
-                       if (nextNode instanceof ProgramElementNode) {
+                       IProgramElement nextNode = (IProgramElement) it.next();
+                       if (nextNode instanceof IProgramElement) {
                                getPackagesHelper(
-                                       (ProgramElementNode) nextNode,
+                                       (IProgramElement) nextNode,
                                        kind,
                                        prename,
                                        matches);
@@ -202,8 +187,8 @@ public class StructureModelUtil {
 
        private class SortingComparator implements Comparator {
                public int compare(Object o1, Object o2) {
-                       ProgramElementNode p1 = (ProgramElementNode) o1;
-                       ProgramElementNode p2 = (ProgramElementNode) o2;
+                       IProgramElement p1 = (IProgramElement) o1;
+                       IProgramElement p2 = (IProgramElement) o2;
 
                        String name1 = p1.getName();
                        String name2 = p2.getName();
@@ -217,8 +202,8 @@ public class StructureModelUtil {
                        Object[] array1 = (Object[]) o1;
                        Object[] array2 = (Object[]) o2;
 
-                       ProgramElementNode p1 = (ProgramElementNode) array1[1];
-                       ProgramElementNode p2 = (ProgramElementNode) array2[1];
+                       IProgramElement p1 = (IProgramElement) array1[1];
+                       IProgramElement p2 = (IProgramElement) array2[1];
 
                        String name1 = p1.getName();
                        String name2 = p2.getName();
@@ -230,7 +215,7 @@ public class StructureModelUtil {
        /**
         * @return              all of the AspectJ and Java source files in a package
         */ 
-       public static List getFilesInPackage(ProgramElementNode packageNode) {
+       public static List getFilesInPackage(IProgramElement packageNode) {
                List packageContents;
                if (packageNode == null) {
                        return null;
@@ -239,9 +224,9 @@ public class StructureModelUtil {
                }
                List files = new ArrayList();
                for (Iterator it = packageContents.iterator(); it.hasNext(); ) {
-                       ProgramElementNode packageItem = (ProgramElementNode)it.next();
-                       if (packageItem.getProgramElementKind() == ProgramElementNode.Kind.FILE_JAVA 
-                               || packageItem.getProgramElementKind() == ProgramElementNode.Kind.FILE_ASPECTJ) {
+                       IProgramElement packageItem = (IProgramElement)it.next();
+                       if (packageItem.getKind() == IProgramElement.Kind.FILE_JAVA 
+                               || packageItem.getKind() == IProgramElement.Kind.FILE_ASPECTJ) {
                                files.add(packageItem);
                        }
                } 
index e997091b4fa7dc73c3320d12669dc3fa036ecdd2..6afc5b91e8ba0524a65c1463ee014f58fcab8c12 100644 (file)
  
 package org.aspectj.ajde.ui;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.*;
 
 /**
  * @author     Mik Kersten
@@ -35,35 +31,35 @@ public class StructureSearchManager {
         */
        public List findMatches(
                String pattern, 
-               ProgramElementNode.Kind kind) {
+               IProgramElement.Kind kind) {
                
                List matches = new ArrayList();
                StructureModel model = Ajde.getDefault().getStructureModelManager().getStructureModel();
                if (model.equals(StructureModel.NO_STRUCTURE)) {
                        return null;
                } else {
-                       return findMatchesHelper((ProgramElementNode)model.getRoot(), pattern, kind, matches);
+                       return findMatchesHelper((IProgramElement)model.getRoot(), pattern, kind, matches);
                }
        }                                       
        
        
        private List findMatchesHelper(
-               ProgramElementNode node, 
+               IProgramElement node, 
                String pattern, 
-               ProgramElementNode.Kind kind,
+               IProgramElement.Kind kind,
                List matches) {
                        
                if (node != null && node.getName().indexOf(pattern) != -1) {
-                       if (kind == null || node.getProgramElementKind().equals(kind)) {
+                       if (kind == null || node.getKind().equals(kind)) {
                                matches.add(node);      
                        } 
                }
                
                for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
-                       StructureNode nextNode = (StructureNode)it.next();
-                       if (nextNode instanceof ProgramElementNode) {
+                       IProgramElement nextNode = (IProgramElement)it.next();
+                       if (nextNode instanceof IProgramElement) {
                                findMatchesHelper(
-                                       (ProgramElementNode)nextNode, 
+                                       (IProgramElement)nextNode, 
                                        pattern, 
                                        kind,
                                        matches);               
index 52d592479a84516692e5afe5983247ade4654021..3ff063d0c9ae69680e47cc7c0429e2cbede52398 100644 (file)
@@ -16,7 +16,7 @@ package org.aspectj.ajde.ui;
 
 import java.util.Iterator;
 
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author Mik Kersten
@@ -57,7 +57,7 @@ public abstract class StructureView {
         */
        public StructureViewNode getActiveNode() {
                if (activeNode != null 
-                       && activeNode.getStructureNode() instanceof ProgramElementNode) {
+                       && activeNode.getStructureNode() instanceof IProgramElement) {
                        return activeNode;
                } else {
                        return null;
@@ -69,11 +69,11 @@ public abstract class StructureView {
         * 
         * @return              the first match
         */
-       public StructureViewNode findCorrespondingViewNode(ProgramElementNode node) {
+       public StructureViewNode findCorrespondingViewNode(IProgramElement node) {
                return findCorrespondingViewNodeHelper(rootNode, node);
        }
 
-       private StructureViewNode findCorrespondingViewNodeHelper(StructureViewNode node, ProgramElementNode pNode) {
+       private StructureViewNode findCorrespondingViewNodeHelper(StructureViewNode node, IProgramElement pNode) {
                
                if (node != null
                        && node.getStructureNode() != null 
index ad2be9c79645fb961ab4585f040785a014b705ec..880ddd5aebdce6e1cef3c5be45bb9bf7d8092be2 100644 (file)
  
 package org.aspectj.ajde.ui;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.ajde.ui.internal.NavigationHistoryModel;
-import org.aspectj.ajde.ui.internal.TreeStructureViewBuilder;
-import org.aspectj.asm.AdviceAssociation;
-import org.aspectj.asm.InheritanceAssociation;
-import org.aspectj.asm.IntroductionAssociation;
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.ReferenceAssociation;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureModelListener;
-import org.aspectj.asm.StructureModelManager;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.ajde.ui.internal.*;
+import org.aspectj.asm.*;
 
 /**
  * @author     Mik Kersten
@@ -47,7 +35,7 @@ public class StructureViewManager {
     private static final StructureViewProperties DEFAULT_VIEW_PROPERTIES; 
     private static final List AVAILABLE_RELATIONS;
        
-    public final StructureModelListener VIEW_LISTENER = new StructureModelListener() {
+    public final IStructureModelListener VIEW_LISTENER = new IStructureModelListener() {
         public void modelUpdated(StructureModel model) {               
                Ajde.getDefault().logEvent("updating structure views: " + structureViews);
 //             
@@ -71,7 +59,7 @@ public class StructureViewManager {
        }
        
        public void fireNavigateBackAction(StructureView view) {
-               ProgramElementNode backNode = historyModel.navigateBack();
+               IProgramElement backNode = historyModel.navigateBack();
                
                if (backNode == null) {
                        Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("No node to navigate back to in history"); 
@@ -81,7 +69,7 @@ public class StructureViewManager {
        }
   
        public void fireNavigateForwardAction(StructureView view) {
-               ProgramElementNode forwardNode = historyModel.navigateForward();
+               IProgramElement forwardNode = historyModel.navigateForward();
                
                if (forwardNode == null) {
                        Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("No node to navigate forward to in history");      
@@ -96,26 +84,27 @@ public class StructureViewManager {
      * @param newFilePath the canonicalized path to the new file
         */
        public void fireNavigationAction(String newFilePath, int lineNumber) {                          
-               StructureNode currNode = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
+               IProgramElement currNode = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
                        newFilePath,
                        lineNumber);
                
-               if (currNode instanceof ProgramElementNode) {
-                       navigationAction((ProgramElementNode)currNode, true);   
+               if (currNode instanceof IProgramElement) {
+                       navigationAction((IProgramElement)currNode, true);      
                }
        } 
                
        /**
         * History is recorded for {@link LinkNode} navigations.
         */
-       public void fireNavigationAction(StructureNode structureNode) {
-               ProgramElementNode node = null;
+       public void fireNavigationAction(IProgramElement IProgramElement) {
+               IProgramElement node = null;
                boolean recordHistory = false;
-               if (structureNode instanceof LinkNode) {
-                       node = ((LinkNode)structureNode).getProgramElementNode();
-                       recordHistory = true;
-               } else if (structureNode instanceof ProgramElementNode) {
-                       node = (ProgramElementNode)structureNode;
+//             if (IProgramElement instanceof LinkNode) {
+//                     node = ((LinkNode)IProgramElement).getProgramElementNode();
+//                     recordHistory = true;
+//             } else 
+               if (IProgramElement instanceof IProgramElement) {
+                       node = (IProgramElement)IProgramElement;
                }
                if (node != null) navigationAction(node, recordHistory);
        }
@@ -125,7 +114,7 @@ public class StructureViewManager {
         * and as such is below the granularity visible in the view the parent is highlighted,
         * along with the corresponding sourceline.
         */ 
-       private void navigationAction(ProgramElementNode node, boolean recordHistory) { 
+       private void navigationAction(IProgramElement node, boolean recordHistory) { 
                if (node == null 
                        || node == StructureModel.NO_STRUCTURE) {
                        Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("Source not available for node: " + node.getName());
@@ -145,8 +134,8 @@ public class StructureViewManager {
            for (Iterator it = structureViews.iterator(); it.hasNext(); ) {
                StructureView view = (StructureView)it.next();
                if (!(view instanceof GlobalStructureView) || !recordHistory || defaultFileView == null) {
-                       if (node.getProgramElementKind().equals(ProgramElementNode.Kind.CODE)) {
-                               ProgramElementNode parentNode = (ProgramElementNode)node.getParent();
+                       if (node.getKind().equals(IProgramElement.Kind.CODE)) {
+                               IProgramElement parentNode = (IProgramElement)node.getParent();
                                if (parentNode != null) {
                                        StructureViewNode currNode = view.findCorrespondingViewNode(parentNode);
                                        int lineOffset = node.getSourceLocation().getLine() - parentNode.getSourceLocation().getLine();
@@ -160,11 +149,11 @@ public class StructureViewManager {
        }
        }
        
-       private ProgramElementNode getProgramElementNode(StructureViewNode node) {
-               if (node.getStructureNode() instanceof ProgramElementNode) {
-                       return (ProgramElementNode)node.getStructureNode();     
-               } else if (node.getStructureNode() instanceof LinkNode) {
-                       return ((LinkNode)node.getStructureNode()).getProgramElementNode();     
+       private IProgramElement getProgramElementNode(StructureViewNode node) {
+               if (node.getStructureNode() instanceof IProgramElement) {
+                       return (IProgramElement)node.getStructureNode();        
+//             } else if (node.getStructureNode() instanceof LinkNode) {
+//                     return ((LinkNode)node.getStructureNode()).getProgramElementNode();     
                } else {
                        return null;
                }       
@@ -228,20 +217,10 @@ public class StructureViewManager {
 
        static {
                AVAILABLE_RELATIONS = new ArrayList();
-        AVAILABLE_RELATIONS.add(AdviceAssociation.METHOD_CALL_SITE_RELATION);
-        AVAILABLE_RELATIONS.add(AdviceAssociation.METHOD_RELATION);
-        AVAILABLE_RELATIONS.add(AdviceAssociation.CONSTRUCTOR_CALL_SITE_RELATION);
-        AVAILABLE_RELATIONS.add(AdviceAssociation.CONSTRUCTOR_RELATION);
-        AVAILABLE_RELATIONS.add(AdviceAssociation.FIELD_ACCESS_RELATION);
-        AVAILABLE_RELATIONS.add(AdviceAssociation.INITIALIZER_RELATION);
-        AVAILABLE_RELATIONS.add(AdviceAssociation.HANDLER_RELATION);
-        AVAILABLE_RELATIONS.add(AdviceAssociation.INTRODUCTION_RELATION);
-        AVAILABLE_RELATIONS.add(IntroductionAssociation.INTRODUCES_RELATION);
-        AVAILABLE_RELATIONS.add(InheritanceAssociation.IMPLEMENTS_RELATION);
-        AVAILABLE_RELATIONS.add(InheritanceAssociation.INHERITS_RELATION);
-        AVAILABLE_RELATIONS.add(InheritanceAssociation.INHERITS_MEMBERS_RELATION);
-        AVAILABLE_RELATIONS.add(ReferenceAssociation.USES_POINTCUT_RELATION);
-        AVAILABLE_RELATIONS.add(ReferenceAssociation.IMPORTS_RELATION);
+        AVAILABLE_RELATIONS.add(IRelationship.Kind.ADVICE);
+        AVAILABLE_RELATIONS.add(IRelationship.Kind.INHERITANCE);
+        AVAILABLE_RELATIONS.add(IRelationship.Kind.DECLARE);
+        AVAILABLE_RELATIONS.add(IRelationship.Kind.REFERENCE);
         
         DEFAULT_VIEW_PROPERTIES = new StructureViewProperties();
         DEFAULT_VIEW_PROPERTIES.setRelations(AVAILABLE_RELATIONS);
index fc2700813db1c257563c7725432812f2f27c8d35..f225a6a0548636eeeb41481fe651b7ccd6cb71c6 100644 (file)
@@ -16,14 +16,14 @@ package org.aspectj.ajde.ui;
 
 import java.util.List;
 
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author Mik Kersten
  */ 
 public interface StructureViewNode {
        
-       public StructureNode getStructureNode();
+       public IProgramElement getStructureNode();
        
        public AbstractIcon getIcon();
        
index 102d58b9536e8d3b374a6300d9dafcb0ae2c9e23..19f64a315bc56ae214f6aa8fb33a9aea1da47732 100644 (file)
@@ -16,10 +16,7 @@ package org.aspectj.ajde.ui;
 
 import java.util.List;
 
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.RelationNode;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.*;
 
 /**
  * @author Mik Kersten
@@ -32,31 +29,40 @@ public abstract class StructureViewNodeFactory {
                this.iconRegistry = iconRegistry;                       
        }
 
-       public StructureViewNode createNode(StructureNode node) {
+       public StructureViewNode createNode(IProgramElement node) {
                return createNode(node, null);          
        }
 
-       public StructureViewNode createNode(StructureNode node, List children) {
+       public StructureViewNode createNode(IProgramElement node, List children) {
                AbstractIcon icon;
-               if (node instanceof ProgramElementNode) {
-                       ProgramElementNode pNode = (ProgramElementNode)node;
-                       icon = iconRegistry.getStructureIcon(pNode.getProgramElementKind(), pNode.getAccessibility());
-               } else if (node instanceof RelationNode) {
-                       RelationNode relationNode = (RelationNode)node;
-                       icon = iconRegistry.getRelationIcon(relationNode.getRelation());
-               } else if (node instanceof LinkNode) {
-                       LinkNode linkNode = (LinkNode)node;
-                       icon = iconRegistry.getStructureIcon(
-                               linkNode.getProgramElementNode().getProgramElementKind(), 
-                               linkNode.getProgramElementNode().getAccessibility());
-               } else {
-                       icon = new AbstractIcon(null);  
-               }
+//             if (node instanceof IProgramElement) {
+//             IProgramElement pNode = (IProgramElement)node;
+               icon = iconRegistry.getStructureIcon(node.getKind(), node.getAccessibility());
+//             } else if (node instanceof IRelationship) {
+//                     IRelationship relationNode = (IRelationship)node;
+//                     icon = iconRegistry.getRelationIcon(relationNode.getKind());
+////           } else if (node instanceof LinkNode) {
+////                   LinkNode linkNode = (LinkNode)node;
+////                   icon = iconRegistry.getStructureIcon(
+////                           linkNode.getProgramElementNode().getProgramElementKind(), 
+////                           linkNode.getProgramElementNode().getAccessibility());
+//             } else {
+//                     icon = new AbstractIcon(null);  
+//             }
+//             node.setChildren(children);
                return createConcreteNode(node, icon, children);
        }
+
+       public StructureViewNode createNode(IRelationship relationship) {
+               AbstractIcon icon;
+               icon = iconRegistry.getRelationIcon(relationship.getKind());
+               return createConcreteNode(relationship, icon);
+       }
        
+       protected abstract StructureViewNode createConcreteNode(IRelationship relationship, AbstractIcon icon);
+
        /**
         * Implementors must override this method in order to create new nodes.
         */ 
-       protected abstract StructureViewNode createConcreteNode(StructureNode node, AbstractIcon icon, List children);
+       protected abstract StructureViewNode createConcreteNode(IProgramElement node, AbstractIcon icon, List children);
 }
index 230108d62aad2254a2b08fd293c62bc6e9a1e402..519d928a774a08fa52cdcb14c370b33f5f9ddec1 100644 (file)
 package org.aspectj.ajde.ui;
 
 import java.io.ObjectStreamException;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.Relation;
+import org.aspectj.asm.*;
 
 /** 
  * Nested properties use the typesafe enum pattern.
@@ -54,12 +52,12 @@ public class StructureViewProperties {
        this.relations = relations;     
     }
 
-    public void addRelation(Relation relation) {
-        relations.add(relation);
+    public void addRelation(IRelationship.Kind kind) {
+        relations.add(kind);
     }
 
-    public void removeRelation(Relation relation) {
-        relations.remove(relation);
+    public void removeRelation(IRelationship.Kind kind) {
+        relations.remove(kind);
     }
 
     public void setFilteredMemberAccessibility(List memberVisibility) {
@@ -70,11 +68,11 @@ public class StructureViewProperties {
         return filteredMemberAccessibility;
     }
 
-    public void addFilteredMemberAccessibility(ProgramElementNode.Accessibility accessibility) {
+    public void addFilteredMemberAccessibility(IProgramElement.Accessibility accessibility) {
                this.filteredMemberAccessibility.add(accessibility);
        }
        
-       public void removeFilteredMemberAccessibility(ProgramElementNode.Accessibility accessibility) {
+       public void removeFilteredMemberAccessibility(IProgramElement.Accessibility accessibility) {
                this.filteredMemberAccessibility.remove(accessibility); 
        }
 
@@ -86,11 +84,11 @@ public class StructureViewProperties {
         this.filteredMemberModifiers = memberModifiers;
     }
     
-    public void addFilteredMemberModifiers(ProgramElementNode.Modifiers modifiers) {
+    public void addFilteredMemberModifiers(IProgramElement.Modifiers modifiers) {
                this.filteredMemberModifiers.add(modifiers);
        }
        
-       public void removeFilteredMemberModifiers(ProgramElementNode.Modifiers modifiers) {
+       public void removeFilteredMemberModifiers(IProgramElement.Modifiers modifiers) {
                this.filteredMemberModifiers.remove(modifiers); 
        }
     
@@ -110,11 +108,11 @@ public class StructureViewProperties {
                this.filteredMemberKinds = memberKinds;
        }
        
-    public void addFilteredMemberKind(ProgramElementNode.Kind kind) {
+    public void addFilteredMemberKind(IProgramElement.Kind kind) {
                this.filteredMemberKinds.add(kind);
        }
        
-       public void removeFilteredMemberKind(ProgramElementNode.Kind kind) {
+       public void removeFilteredMemberKind(IProgramElement.Kind kind) {
                this.filteredMemberKinds.remove(kind);  
        }
        
index d15167926b47863ba54a9c4b3575a5e0bd0855ac..2f1425a9405d0a392dd99017f1d3ff3f67f1595d 100644 (file)
@@ -16,41 +16,41 @@ package org.aspectj.ajde.ui.internal;
 
 import java.util.Stack;
 
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author Mik Kersten
  */
 public class NavigationHistoryModel {
     
-    private ProgramElementNode currNode = null;
+    private IProgramElement currNode = null;
     private Stack backHistory = new Stack();
     private Stack forwardHistory = new Stack();
     
     /**
      * @return         null if the history is empty
      */
-       public ProgramElementNode navigateBack() {
+       public IProgramElement navigateBack() {
                if (backHistory.isEmpty() || currNode == null) return null;
                
                forwardHistory.push(currNode);
-               currNode = (ProgramElementNode)backHistory.pop();
+               currNode = (IProgramElement)backHistory.pop();
                return currNode;
        }
 
     /**
      * @return         null if the history is empty
      */ 
-       public ProgramElementNode navigateForward() {
+       public IProgramElement navigateForward() {
                if (forwardHistory.isEmpty() || currNode == null) return null;
                
                backHistory.push(currNode);
-               currNode = (ProgramElementNode)forwardHistory.pop();
+               currNode = (IProgramElement)forwardHistory.pop();
                return currNode;
        }
 
     
-    public void navigateToNode(ProgramElementNode toNode) {
+    public void navigateToNode(IProgramElement toNode) {
        if (currNode != null) backHistory.push(currNode);
        currNode = toNode; 
     }
index 32daa8a3445687b0f7a730a6ecc108102e971557..4473dc1e93c86d26888897a3f0b73a0c66682aac 100644 (file)
 
 package org.aspectj.ajde.ui.internal;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
-import org.aspectj.ajde.ui.FileStructureView;
-import org.aspectj.ajde.ui.GlobalStructureView;
-import org.aspectj.ajde.ui.StructureView;
-import org.aspectj.ajde.ui.StructureViewNode;
-import org.aspectj.ajde.ui.StructureViewNodeFactory;
-import org.aspectj.ajde.ui.StructureViewProperties;
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.Relation;
-import org.aspectj.asm.RelationNode;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.asm.*;
+import org.aspectj.asm.internal.ProgramElement;
 
 /**
  * @author Mik Kersten
@@ -49,7 +36,7 @@ public class TreeStructureViewBuilder {
         */
        public void buildView(StructureView view, StructureModel model) {
                StructureViewProperties properties = view.getViewProperties();
-               StructureNode modelRoot = null;
+               IProgramElement modelRoot = null;
                boolean noStructure = false;
                if (isFileView(view)) {
                        FileStructureView fileView = (FileStructureView)view;
@@ -62,7 +49,7 @@ public class TreeStructureViewBuilder {
                } else {
                        modelRoot = model.getRoot();
                }
-       
+               
                StructureViewNode viewRoot = null;
                if (!isFileView(view)) {
                        StructureViewProperties.Hierarchy hierarchy 
@@ -90,53 +77,50 @@ public class TreeStructureViewBuilder {
 
        private void addPackageNode(StructureView view, StructureViewNode viewRoot) {
                if (isFileView(view)) {
-                       ProgramElementNode fileNode = (ProgramElementNode)viewRoot.getStructureNode();
-                       
-                       StructureNode parentNode = fileNode.getParent();
-                       if (parentNode instanceof ProgramElementNode 
-                               && ((ProgramElementNode)parentNode).getProgramElementKind().equals(ProgramElementNode.Kind.PACKAGE)) {
-                               String name = ((ProgramElementNode)parentNode).getName();
-                               ProgramElementNode packageNode = new ProgramElementNode(name, ProgramElementNode.Kind.PACKAGE, null);
-                               packageNode.setSourceLocation(fileNode.getSourceLocation());
-                               StructureViewNode packageViewNode = createViewNode(
-                                       packageNode, 
-                                       view.getViewProperties()
-                               );
-                               viewRoot.getChildren().add(0, packageViewNode);
-                       };
+//                     IProgramElement fileNode = viewRoot.getStructureNode();
+//                     IProgramElement parentNode = fileNode.getParent();
+//                     
+//                     if (parentNode.getKind() == IProgramElement.Kind.PACKAGE) {
+//                             String name = parentNode.getName();
+//                             IProgramElement packageNode = new ProgramElement(name, IProgramElement.Kind.PACKAGE, null);
+//                             packageNode.setSourceLocation(fileNode.getSourceLocation());
+//                             StructureViewNode packageViewNode = createViewNode(
+//                                     packageNode, 
+//                                     view.getViewProperties()
+//                             );
+//                             viewRoot.getChildren().add(0, packageViewNode);
+//                     };
                }
        }
        
-       private StructureViewNode createViewNode(StructureNode node, StructureViewProperties properties) {
+       private StructureViewNode createViewNode(IProgramElement node, StructureViewProperties properties) {
                if (node == null) return null;
                List children = new ArrayList();
-               if (node instanceof ProgramElementNode) {
-                       ProgramElementNode pNode = (ProgramElementNode)node;
-                       if (pNode.getRelations() != null) {
-                               for (Iterator it = pNode.getRelations().iterator(); it.hasNext(); ) {
-                                       StructureNode structureNode = (StructureNode)it.next();
-                                       if (acceptNode(structureNode, properties)) {
-                                               children.add(createViewNode(structureNode, properties));
-                                       }
-                               }       
-                       }
-                       if (pNode.isRunnable() && pNode.getParent() != null) {
-                               ProgramElementNode parent = (ProgramElementNode)pNode.getParent();
-                               if (parent.getProgramElementKind().equals(ProgramElementNode.Kind.CLASS)
-                                       || parent.getProgramElementKind().equals(ProgramElementNode.Kind.ASPECT)) {
-                                       parent.setRunnable(true);       
-                                       pNode.setRunnable(false);
-                               }
-                       }
-               }
-               if (node.getChildren() != null) {
-                       for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
-                               StructureNode structureNode = (StructureNode)it.next();
-                               if (acceptNode(structureNode, properties)) {
-                                       children.add(createViewNode(structureNode, properties));
+//             IProgramElement pNode = node;
+               if (node.getRelations() != null) {
+                       for (Iterator it = node.getRelations().iterator(); it.hasNext(); ) {
+                               IProgramElement IProgramElement = (IProgramElement)it.next();
+                               if (acceptNode(IProgramElement, properties)) {
+                                       children.add(createViewNode(IProgramElement, properties));
                                }
                        }       
                }
+               if (node.isRunnable() && node.getParent() != null) {
+                       IProgramElement parent = node.getParent();
+                       if (parent.getKind().equals(IProgramElement.Kind.CLASS)
+                               || parent.getKind().equals(IProgramElement.Kind.ASPECT)) {
+                               parent.setRunnable(true);       
+                               node.setRunnable(false);
+                       }
+               }
+//             if (node.getChildren() != null) {
+//                     for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
+//                             IProgramElement IProgramElement = (IProgramElement)it.next();
+//                             if (acceptNode(IProgramElement, properties)) {
+//                                     children.add(createViewNode(IProgramElement, properties));
+//                             }
+//                     }       
+//             }
                StructureViewNode viewNode = nodeFactory.createNode(node, children);//new TreeViewNode(root, null, children);
                return viewNode;        
        }
@@ -149,43 +133,43 @@ public class TreeStructureViewBuilder {
                        && !(view instanceof GlobalStructureView);
        }
        
-       private boolean acceptGranularity(ProgramElementNode.Kind kind, StructureViewProperties.Granularity granularity) {
+       private boolean acceptGranularity(IProgramElement.Kind kind, StructureViewProperties.Granularity granularity) {
                
                if (granularity == StructureViewProperties.Granularity.DECLARED_ELEMENTS) {
                        return true;
                } else if (granularity == StructureViewProperties.Granularity.MEMBER && 
-                       (kind != ProgramElementNode.Kind.CODE)) {
+                       (kind != IProgramElement.Kind.CODE)) {
                        return true;
                } else if (granularity == StructureViewProperties.Granularity.TYPE
-                       && (kind == ProgramElementNode.Kind.PROJECT
-                               || kind == ProgramElementNode.Kind.PACKAGE
+                       && (kind == IProgramElement.Kind.PROJECT
+                               || kind == IProgramElement.Kind.PACKAGE
                                || kind.isSourceFileKind()
                                || kind.isTypeKind())) {
                        return true;                    
                } else if (granularity == StructureViewProperties.Granularity.FILE
-                       && (kind == ProgramElementNode.Kind.PROJECT
-                               || kind == ProgramElementNode.Kind.PACKAGE
+                       && (kind == IProgramElement.Kind.PROJECT
+                               || kind == IProgramElement.Kind.PACKAGE
                                || kind.isSourceFileKind())) {
                        return true;                    
                } else if (granularity == StructureViewProperties.Granularity.PACKAGE
-                       && (kind == ProgramElementNode.Kind.PROJECT
-                               || kind == ProgramElementNode.Kind.PACKAGE)) {
+                       && (kind == IProgramElement.Kind.PROJECT
+                               || kind == IProgramElement.Kind.PACKAGE)) {
                        return true;                    
                } else {
                        return false;
                }
        }
        
-       private boolean acceptNode(StructureNode node, StructureViewProperties properties) {
-               if (node instanceof ProgramElementNode) {
-                       ProgramElementNode pNode = (ProgramElementNode)node;
-                       if (!acceptGranularity(pNode.getProgramElementKind(), properties.getGranularity())) {
+       private boolean acceptNode(IProgramElement node, StructureViewProperties properties) {
+               if (node instanceof IProgramElement) {
+                       IProgramElement pNode = (IProgramElement)node;
+                       if (!acceptGranularity(pNode.getKind(), properties.getGranularity())) {
                                return false;
                        } else if (pNode.isMemberKind()) {
                                if (properties.getFilteredMemberAccessibility().contains(pNode.getAccessibility())) {
                                        return false;   
                                }
-                               if (properties.getFilteredMemberKinds().contains(pNode.getProgramElementKind())) {
+                               if (properties.getFilteredMemberKinds().contains(pNode.getKind())) {
                                        return false;   
                                }
                                for (Iterator it = pNode.getModifiers().iterator(); it.hasNext(); ) {
@@ -194,8 +178,8 @@ public class TreeStructureViewBuilder {
                                        }       
                                }
                        }
-               } else if (node instanceof RelationNode) {
-                       Relation relation = ((RelationNode)node).getRelation();
+               } else if (node instanceof IRelationship) {
+                       IRelationship relation = (IRelationship)node;
                        return properties.getRelations().contains(relation);
                } else {
                        return true;
@@ -213,7 +197,7 @@ public class TreeStructureViewBuilder {
        }
 
     private StructureViewNode buildCustomTree(GlobalStructureView view, StructureModel model) {
-        StructureNode rootNode = model.getRoot();
+        IProgramElement rootNode = model.getRoot();
         StructureViewNode treeNode = nodeFactory.createNode(rootNode);
 
         List rootNodes = new ArrayList();
@@ -221,10 +205,10 @@ public class TreeStructureViewBuilder {
                
         for (Iterator it = rootNodes.iterator(); it.hasNext(); ) {
             if (view.getGlobalViewProperties().getHierarchy().equals(StructureViewProperties.Hierarchy.CROSSCUTTING)) {
-                treeNode.add(getCrosscuttingChildren((StructureNode)it.next()));
+                treeNode.add(getCrosscuttingChildren((IProgramElement)it.next()));
             } else if (view.getGlobalViewProperties().getHierarchy().equals(StructureViewProperties.Hierarchy.INHERITANCE)) {
                 treeNode.add(getInheritanceChildren(
-                       (StructureNode)it.next(),
+                       (IProgramElement)it.next(),
                        view.getViewProperties().getRelations())        
                 );
             }
@@ -232,123 +216,125 @@ public class TreeStructureViewBuilder {
         return treeNode;
     }
 
-    private void getRoots(StructureNode rootNode, List roots, StructureViewProperties.Hierarchy hierarchy) {
-        if (rootNode != null && rootNode.getChildren() != null) {
-            for (Iterator it = rootNode.getChildren().iterator(); it.hasNext(); ) {
-                StructureNode node = (StructureNode)it.next();
-                if (node instanceof ProgramElementNode) {
-                    if (acceptNodeAsRoot((ProgramElementNode)node, hierarchy)) {
-                        ProgramElementNode pNode = (ProgramElementNode)node;
-                        List relations = pNode.getRelations();
-                        String delimiter = "";
-                        if (hierarchy.equals(StructureViewProperties.Hierarchy.CROSSCUTTING)) {
-                            delimiter = "uses pointcut";
-                        } else if (hierarchy.equals(StructureViewProperties.Hierarchy.INHERITANCE)) {
-                            delimiter = "inherits";
-                        } 
-                        if (relations != null && relations.toString().indexOf(delimiter) == -1) {
-                            boolean found = false;
-                            for (Iterator it2 = roots.iterator(); it2.hasNext(); ) {
-                                if (((ProgramElementNode)it2.next()).equals(pNode)) found = true;
-                            }
-                            if (!found) roots.add(pNode);
-                        } 
-                    } 
-                }
-                getRoots(node, roots, hierarchy);
-            }
-        }
+    private void getRoots(IProgramElement rootNode, List roots, StructureViewProperties.Hierarchy hierarchy) {
+//        if (rootNode != null && rootNode.getChildren() != null) {
+//            for (Iterator it = rootNode.getChildren().iterator(); it.hasNext(); ) {
+//                IProgramElement node = (IProgramElement)it.next();
+//                if (node instanceof IProgramElement) {
+//                    if (acceptNodeAsRoot((IProgramElement)node, hierarchy)) {
+//                        IProgramElement pNode = (IProgramElement)node;
+//                        List relations = pNode.getRelations();
+//                        String delimiter = "";
+//                        if (hierarchy.equals(StructureViewProperties.Hierarchy.CROSSCUTTING)) {
+//                            delimiter = "uses pointcut";
+//                        } else if (hierarchy.equals(StructureViewProperties.Hierarchy.INHERITANCE)) {
+//                            delimiter = "inherits";
+//                        } 
+//                        if (relations != null && relations.toString().indexOf(delimiter) == -1) {
+//                            boolean found = false;
+//                            for (Iterator it2 = roots.iterator(); it2.hasNext(); ) {
+//                                if (((IProgramElement)it2.next()).equals(pNode)) found = true;
+//                            }
+//                            if (!found) roots.add(pNode);
+//                        } 
+//                    } 
+//                }
+//                getRoots(node, roots, hierarchy);
+//            }
+//        }
     }
 
-    public boolean acceptNodeAsRoot(ProgramElementNode node, StructureViewProperties.Hierarchy hierarchy) {
+    public boolean acceptNodeAsRoot(IProgramElement node, StructureViewProperties.Hierarchy hierarchy) {
         if (hierarchy.equals(StructureViewProperties.Hierarchy.CROSSCUTTING)) {
-            return node.getProgramElementKind().equals(ProgramElementNode.Kind.ADVICE)
-                || node.getProgramElementKind().equals(ProgramElementNode.Kind.POINTCUT);
+            return node.getKind().equals(IProgramElement.Kind.ADVICE)
+                || node.getKind().equals(IProgramElement.Kind.POINTCUT);
         } else if (hierarchy.equals(StructureViewProperties.Hierarchy.INHERITANCE)) {
-            return node.getProgramElementKind().equals(ProgramElementNode.Kind.CLASS);
+            return node.getKind().equals(IProgramElement.Kind.CLASS);
         } else {       
             return false;
         }
     }
 
-    private StructureViewNode getInheritanceChildren(StructureNode node, List associations) {
+    private StructureViewNode getInheritanceChildren(IProgramElement node, List associations) {
        StructureViewNode treeNode = nodeFactory.createNode(node);
         //StructureViewNode treeNode = new StructureViewNodeAdapter(node);
-        List relations = ((ProgramElementNode)node).getRelations();
-        if (relations != null) {
-            for (Iterator it = relations.iterator(); it.hasNext(); ) {
-                RelationNode relation = (RelationNode)it.next();
-                if (relation.getName().equals("is inherited by")) {
-                    for (Iterator it2 = relation.getChildren().iterator(); it2.hasNext(); ) {
-                        ProgramElementNode pNode = ((LinkNode)it2.next()).getProgramElementNode();
-                        StructureViewNode newNode = getInheritanceChildren(pNode, associations);
-                        StructureViewNode typeChildren = buildTree(newNode.getStructureNode(), associations);
-                        for (int i = 0; i < typeChildren.getChildren().size(); i++) {
-                            newNode.add((StructureViewNode)typeChildren.getChildren().get(i));
-                        }
-                                               treeNode.add(newNode);
-                    }
-                }
-            }
-        }
-        return treeNode;
+        List relations = ((IProgramElement)node).getRelations();
+        throw new RuntimeException("unimplemented");
+//        if (relations != null) {
+//            for (Iterator it = relations.iterator(); it.hasNext(); ) {
+//                             IRelationship relation = (IRelationship)it.next();
+//                if (relation.getName().equals("is inherited by")) {
+//                    for (Iterator it2 = relation.getTargets().iterator(); it2.hasNext(); ) {
+////                        IProgramElement pNode = ((LinkNode)it2.next()).getProgramElementNode();
+////                        StructureViewNode newNode = getInheritanceChildren(pNode, associations);
+//                        StructureViewNode typeChildren = buildTree(newNode.getStructureNode(), associations);
+//                        for (int i = 0; i < typeChildren.getChildren().size(); i++) {
+//                            newNode.add((StructureViewNode)typeChildren.getChildren().get(i));
+//                        }
+//                                             treeNode.add(newNode);
+//                    }
+//                }
+//            }
+//        }
+//        return treeNode;
     }
 
-    private StructureViewNode getCrosscuttingChildren(StructureNode node) {
+    private StructureViewNode getCrosscuttingChildren(IProgramElement node) {
         //StructureViewNodeAdapter treeNode = new StructureViewNodeAdapter(node);
         StructureViewNode treeNode = nodeFactory.createNode(node);
-        List relations = ((ProgramElementNode)node).getRelations();
-        if (relations != null) {
-            for (Iterator it = relations.iterator(); it.hasNext(); ) {
-                RelationNode relation = (RelationNode)it.next();
-                if (relation.getName().equals("pointcut used by")) {
-                    for (Iterator it2 = relation.getChildren().iterator(); it2.hasNext(); ) {
-                        ProgramElementNode pNode = ((LinkNode)it2.next()).getProgramElementNode();
-                        StructureViewNode newNode = getCrosscuttingChildren(pNode);
-                        for (Iterator it3 = pNode.getRelations().iterator(); it3.hasNext(); ) {
-                            RelationNode relationNode = (RelationNode)it3.next();
-                            if (relationNode.getName().indexOf("pointcut") == -1) {
-                                newNode.add(getRelations(relationNode));
-                            }
-                        }
-                        treeNode.add(newNode);
-                    }
-                } else if (relations.toString().indexOf("uses pointcut") == -1) {
-                    for (Iterator it4 = relations.iterator(); it4.hasNext(); ) {
-                        RelationNode relationNode = (RelationNode)it4.next();
-                        if (relationNode.getName().indexOf("pointcut") == -1) {
-                            treeNode.add(getRelations(relationNode));
-                        }
-                    }
-                }
-            }
-        }
-        return treeNode;
+        List relations = ((IProgramElement)node).getRelations();
+        throw new RuntimeException("unimplemented");
+//        if (relations != null) {
+//            for (Iterator it = relations.iterator(); it.hasNext(); ) {
+//                             IRelationship relation = (IRelationship)it.next();
+//                if (relation.getName().equals("pointcut used by")) {
+//                    for (Iterator it2 = relation.getTargets().iterator(); it2.hasNext(); ) {
+//                        IProgramElement pNode = ((LinkNode)it2.next()).getProgramElementNode();
+//                        StructureViewNode newNode = getCrosscuttingChildren(pNode);
+//                        for (Iterator it3 = pNode.getRelations().iterator(); it3.hasNext(); ) {
+//                                                     IRelationship relationNode = (IRelation)it3.next();
+//                            if (relationNode.getName().indexOf("pointcut") == -1) {
+//                                newNode.add(getRelations(relationNode));
+//                            }
+//                        }
+//                        treeNode.add(newNode);
+//                    }
+//                } else if (relations.toString().indexOf("uses pointcut") == -1) {
+//                    for (Iterator it4 = relations.iterator(); it4.hasNext(); ) {
+//                        IRelation relationNode = (IRelationship)it4.next();
+//                        if (relationNode.getName().indexOf("pointcut") == -1) {
+//                            treeNode.add(getRelations(relationNode));
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//        return treeNode;
     }
 
-    private StructureViewNode buildTree(StructureNode node, List associations) {
+    private StructureViewNode buildTree(IProgramElement node, List associations) {
         //StructureViewNode treeNode = new StructureViewNodeAdapter(node);
         StructureViewNode treeNode = nodeFactory.createNode(node);
-        if (node instanceof ProgramElementNode) {
-            List relations = ((ProgramElementNode)node).getRelations();
-            if (relations != null) {
-                for (Iterator it = relations.iterator(); it.hasNext(); ) {
-                    RelationNode relationNode = (RelationNode)it.next();
-                    if (associations.contains(relationNode.getRelation().toString())) {
-                        treeNode.add(buildTree(relationNode, associations));
-                    }
-                }
-            }
-        }
+//        if (node instanceof IProgramElement) {
+//            List relations = ((IProgramElement)node).getRelations();
+//            if (relations != null) {
+//                for (Iterator it = relations.iterator(); it.hasNext(); ) {
+//                                     IRelationship relationNode = (IRelationship)it.next();
+//                    if (associations.contains(relationNode.toString())) {
+//                        treeNode.add(buildTree(relationNode, associations));
+//                    }
+//                }
+//            }
+//        }
         if (node != null) {
             List children = null;
             children = node.getChildren();
             if (children != null) {
                 List childList = new ArrayList();
                 for (Iterator itt = children.iterator(); itt.hasNext(); ) {
-                    StructureNode child = (StructureNode)itt.next();
-                    if (child instanceof ProgramElementNode) {
-                        ProgramElementNode progNode = (ProgramElementNode)child;
+                    IProgramElement child = (IProgramElement)itt.next();
+                    if (child instanceof IProgramElement) {
+                        IProgramElement progNode = (IProgramElement)child;
                         if (!progNode.isCode()) {
                             childList.add(buildTree(child, associations));
                         }
@@ -366,12 +352,12 @@ public class TreeStructureViewBuilder {
         return treeNode;
     }
 
-    private StructureViewNode getRelations(RelationNode node) {
+    private StructureViewNode getRelations(IRelationship node) {
         //StructureViewNode treeNode = new StructureViewNode(node);
         StructureViewNode treeNode = nodeFactory.createNode(node);
-        for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
+        for (Iterator it = node.getTargets().iterator(); it.hasNext(); ) {
             treeNode.add(
-               nodeFactory.createNode((StructureNode)it.next())
+               nodeFactory.createNode((IProgramElement)it.next())
             );
         }
         return treeNode;
@@ -392,11 +378,11 @@ public class TreeStructureViewBuilder {
 
     private static final Comparator ALPHABETICAL_COMPARATOR = new Comparator() {
         public int compare(Object o1, Object o2) {  
-               StructureNode sv1 = ((StructureViewNode)o1).getStructureNode();
-               StructureNode sv2 = ((StructureViewNode)o2).getStructureNode();        
-            if (sv1 instanceof ProgramElementNode && sv2 instanceof ProgramElementNode) {
-               ProgramElementNode p1 = (ProgramElementNode)sv1;
-               ProgramElementNode p2 = (ProgramElementNode)sv2;
+               IProgramElement sv1 = ((StructureViewNode)o1).getStructureNode();
+               IProgramElement sv2 = ((StructureViewNode)o2).getStructureNode();        
+            if (sv1 instanceof IProgramElement && sv2 instanceof IProgramElement) {
+               IProgramElement p1 = (IProgramElement)sv1;
+               IProgramElement p2 = (IProgramElement)sv2;
                                return p1.getName().compareTo(p2.getName());
             } else {
                return 0;       
@@ -406,11 +392,11 @@ public class TreeStructureViewBuilder {
     
     private static final Comparator DECLARATIONAL_COMPARATOR = new Comparator() {
         public int compare(Object o1, Object o2) {            
-               StructureNode sv1 = ((StructureViewNode)o1).getStructureNode();
-               StructureNode sv2 = ((StructureViewNode)o2).getStructureNode();        
-            if (sv1 instanceof ProgramElementNode && sv2 instanceof ProgramElementNode) {
-               ProgramElementNode p1 = (ProgramElementNode)sv1;
-               ProgramElementNode p2 = (ProgramElementNode)sv2;
+               IProgramElement sv1 = ((StructureViewNode)o1).getStructureNode();
+               IProgramElement sv2 = ((StructureViewNode)o2).getStructureNode();        
+            if (sv1 instanceof IProgramElement && sv2 instanceof IProgramElement) {
+               IProgramElement p1 = (IProgramElement)sv1;
+               IProgramElement p2 = (IProgramElement)sv2;
                if (p1.getSourceLocation() == null) {
                        return 0;
                } else if (p1.getSourceLocation().getLine() < p2.getSourceLocation().getLine()) {
index c2dbd074ca4d1d6893c227267d788764d5523d47..bd1f9d76b87fc044133f1fa8ac71524f07c79899 100644 (file)
@@ -47,6 +47,28 @@ public class AjdeUIManager {
        private Frame rootFrame = null;
        private StructureViewPanel fileStructurePanel = null;
 
+       public void init(
+               EditorAdapter editorAdapter,
+               TaskListManager taskListManager,
+               ProjectPropertiesAdapter projectProperties,
+               UserPreferencesAdapter userPreferencesAdapter,
+               IdeUIAdapter ideUIAdapter,
+               IconRegistry iconRegistry,
+               Frame rootFrame,
+               boolean useFileView) {
+                       
+               init(editorAdapter,
+                       taskListManager,
+                       projectProperties,
+                       userPreferencesAdapter,
+                       ideUIAdapter,
+                       iconRegistry,
+                       rootFrame,
+                       new DefaultBuildProgressMonitor(rootFrame),
+                       new AjdeErrorHandler(),
+                       useFileView);
+       }
+
        /**
         * Order of initialization is critical here.
         */
@@ -58,10 +80,10 @@ public class AjdeUIManager {
                IdeUIAdapter ideUIAdapter,
                IconRegistry iconRegistry,
                Frame rootFrame,
+               BuildProgressMonitor progressMonitor,
+               ErrorHandler errorHandler, 
                boolean useFileView) {
                try {   
-                       BuildProgressMonitor compileProgress = new DefaultBuildProgressMonitor(rootFrame);
-                       ErrorHandler errorHandler = new AjdeErrorHandler();
                        this.iconRegistry = iconRegistry;
                        //ConfigurationManager configManager = new LstConfigurationManager();
                        this.ideUIAdapter = ideUIAdapter;
@@ -72,7 +94,7 @@ public class AjdeUIManager {
                        Ajde.init(
                                editorAdapter,
                                taskListManager,
-                               compileProgress,
+                               progressMonitor,
                                projectProperties,
                                buildOptionsAdapter,
                                new SwingTreeViewNodeFactory(iconRegistry),
index 3b69fd7a634154b292bdc7515618ddc79b14a51d..0ab69ae09bbec0f52e273c559abc509d9decc992 100644 (file)
 
 package org.aspectj.ajde.ui.swing;
 
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
+import java.awt.*;
+import java.awt.event.*;
 import java.util.Iterator;
 
-import javax.swing.ButtonGroup;
-import javax.swing.Icon;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JSeparator;
+import javax.swing.*;
 import javax.swing.border.Border;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.ajde.ui.GlobalStructureView;
-import org.aspectj.ajde.ui.StructureView;
-import org.aspectj.ajde.ui.StructureViewProperties;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.Relation;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.asm.*;
 
 public class BrowserStructureViewToolPanel extends JPanel {
 
@@ -112,7 +99,7 @@ public class BrowserStructureViewToolPanel extends JPanel {
 
        private JPopupMenu createFilterMenu() {
                JPopupMenu filterMenu = new JPopupMenu();
-               ProgramElementNode.Accessibility[] accessibility = ProgramElementNode.Accessibility.ALL;
+               IProgramElement.Accessibility[] accessibility = IProgramElement.Accessibility.ALL;
                for (int i = 0; i < accessibility.length; i++) {
                        CheckBoxSelectionMenuButton menuItem = new CheckBoxSelectionMenuButton(accessibility[i]);
                        menuItem.setIcon(AjdeUIManager.getDefault().getIconRegistry().getAccessibilitySwingIcon(accessibility[i]));
@@ -120,7 +107,7 @@ public class BrowserStructureViewToolPanel extends JPanel {
                }
                filterMenu.add(new JSeparator());
 
-               ProgramElementNode.Kind[] kinds = ProgramElementNode.Kind.ALL;
+               IProgramElement.Kind[] kinds = IProgramElement.Kind.ALL;
                for (int i = 0; i < kinds.length; i++) {
                        if (kinds[i].isMemberKind()) {
                                CheckBoxSelectionMenuButton menuItem = new CheckBoxSelectionMenuButton(kinds[i]);
@@ -130,7 +117,7 @@ public class BrowserStructureViewToolPanel extends JPanel {
                }
                filterMenu.add(new JSeparator());
 
-               ProgramElementNode.Modifiers[] modifiers = ProgramElementNode.Modifiers.ALL;
+               IProgramElement.Modifiers[] modifiers = IProgramElement.Modifiers.ALL;
                for (int i = 0; i < modifiers.length; i++) {
                        CheckBoxSelectionMenuButton menuItem = new CheckBoxSelectionMenuButton(modifiers[i]);
                        filterMenu.add(menuItem);
@@ -143,7 +130,7 @@ public class BrowserStructureViewToolPanel extends JPanel {
 
                java.util.List relations = Ajde.getDefault().getStructureViewManager().getAvailableRelations();
                for (Iterator it = relations.iterator(); it.hasNext(); ) {
-                       Relation relation = (Relation)it.next();
+                       IRelationship.Kind relation = (IRelationship.Kind)it.next();
                        CheckBoxSelectionMenuButton menuItem = new CheckBoxSelectionMenuButton(relation);
                        menuItem.setIcon((Icon)AjdeUIManager.getDefault().getIconRegistry().getRelationIcon(relation).getIconResource());
                        relationsMenu.add(menuItem);
@@ -198,17 +185,17 @@ public class BrowserStructureViewToolPanel extends JPanel {
                        //super.setSelected(true);
                }
 
-               public CheckBoxSelectionMenuButton(ProgramElementNode.Accessibility accessibility) {
+               public CheckBoxSelectionMenuButton(IProgramElement.Accessibility accessibility) {
                        this(accessibility.toString());
                        this.addActionListener(new CheckBoxSelectionMenuActionListener(accessibility));
                }
 
-               public CheckBoxSelectionMenuButton(ProgramElementNode.Kind kind) {
+               public CheckBoxSelectionMenuButton(IProgramElement.Kind kind) {
                        this(kind.toString());
                        this.addActionListener(new CheckBoxSelectionMenuActionListener(kind));
                }
 
-               public CheckBoxSelectionMenuButton(ProgramElementNode.Modifiers modifiers) {
+               public CheckBoxSelectionMenuButton(IProgramElement.Modifiers modifiers) {
                        this(modifiers.toString());
                        this.addActionListener(new CheckBoxSelectionMenuActionListener(modifiers));
                }
@@ -218,7 +205,7 @@ public class BrowserStructureViewToolPanel extends JPanel {
                        this.addActionListener(new CheckBoxSelectionMenuActionListener(sorting));
                }
 
-               public CheckBoxSelectionMenuButton(Relation relation) {
+               public CheckBoxSelectionMenuButton(IRelationship.Kind relation) {
                        this(relation.toString());
                        this.addActionListener(new CheckBoxSelectionMenuActionListener(relation));
                }
@@ -228,21 +215,21 @@ public class BrowserStructureViewToolPanel extends JPanel {
         * Ewwwwww!
         */
        private class CheckBoxSelectionMenuActionListener implements ActionListener {
-               private ProgramElementNode.Accessibility accessibility = null;
-               private ProgramElementNode.Kind kind = null;
-               private ProgramElementNode.Modifiers modifiers = null;
+               private IProgramElement.Accessibility accessibility = null;
+               private IProgramElement.Kind kind = null;
+               private IProgramElement.Modifiers modifiers = null;
                private StructureViewProperties.Sorting sorting = null;
-               private Relation relation = null;
+               private IRelationship.Kind relation = null;
 
-               public CheckBoxSelectionMenuActionListener(ProgramElementNode.Accessibility accessibility) {
+               public CheckBoxSelectionMenuActionListener(IProgramElement.Accessibility accessibility) {
                        this.accessibility = accessibility;
                }
 
-               public CheckBoxSelectionMenuActionListener(ProgramElementNode.Kind kind) {
+               public CheckBoxSelectionMenuActionListener(IProgramElement.Kind kind) {
                        this.kind = kind;
                }
 
-               public CheckBoxSelectionMenuActionListener(ProgramElementNode.Modifiers modifiers) {
+               public CheckBoxSelectionMenuActionListener(IProgramElement.Modifiers modifiers) {
                        this.modifiers = modifiers;
                }
 
@@ -250,8 +237,8 @@ public class BrowserStructureViewToolPanel extends JPanel {
                        this.sorting = sorting;
                }
 
-               public CheckBoxSelectionMenuActionListener(Relation relation) {
-                       this.relation = relation;
+               public CheckBoxSelectionMenuActionListener(IRelationship.Kind relationKind) {
+                       this.relation = relationKind;
                }
 
                public void actionPerformed(ActionEvent e) {
index aa1ed12d3693290aa5eb55713fa805f2c97f135f..acabee5009932c775c3542b9af6676119916b6dc 100644 (file)
@@ -37,7 +37,7 @@ import javax.swing.ListCellRenderer;
 import javax.swing.border.Border;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author Mik Kersten
@@ -215,7 +215,7 @@ class BrowserView extends JPanel {
                 joinpointProbe_button_actionPerformed(e);
             }
         });
-        joinpointProbe_button.setIcon(icons.getStructureSwingIcon(ProgramElementNode.Kind.POINTCUT));
+        joinpointProbe_button.setIcon(icons.getStructureSwingIcon(IProgramElement.Kind.POINTCUT));
         joinpointProbe_button.setToolTipText("Create joinpoint probe");
         joinpointProbe_button.setPreferredSize(new Dimension(20, 20));
         joinpointProbe_button.setMinimumSize(new Dimension(20, 20));
index 2e21a363183e7cdd981f6398c557ca6769603f15..7763573d2abce58361a0dca451365ec5c909650c 100644 (file)
@@ -35,7 +35,7 @@ public class BrowserViewManager {
   
     private Stack backHistory = new Stack();
     private Stack forwardHistory = new Stack();
-    private ProgramElementNode currNode = null;
+    private IProgramElement currNode = null;
 
        private final GlobalStructureView DECLARATION_VIEW;
        private final GlobalStructureView CROSSCUTTING_VIEW;
@@ -68,17 +68,19 @@ public class BrowserViewManager {
                CROSSCUTTING_VIEW_PROPERTIES = new GlobalViewProperties(StructureViewProperties.Hierarchy.CROSSCUTTING);
        INHERITANCE_VIEW_PROPERTIES = new GlobalViewProperties(StructureViewProperties.Hierarchy.INHERITANCE);  
     
-        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.METHOD_RELATION);
-        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.METHOD_CALL_SITE_RELATION);
-        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.CONSTRUCTOR_RELATION);
-        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.CONSTRUCTOR_CALL_SITE_RELATION);
-        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.HANDLER_RELATION);
-        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.INITIALIZER_RELATION);
-        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.FIELD_ACCESS_RELATION);
-
-        INHERITANCE_VIEW_PROPERTIES.addRelation(InheritanceAssociation.IMPLEMENTS_RELATION);
-        INHERITANCE_VIEW_PROPERTIES.addRelation(InheritanceAssociation.INHERITS_MEMBERS_RELATION);
-        INHERITANCE_VIEW_PROPERTIES.addRelation(InheritanceAssociation.INHERITS_RELATION);
+//        CROSSCUTTING_VIEW_PROPERTIES.addRelation(IRelationship.Kind.ADVICE);
+//             CROSSCUTTING_VIEW_PROPERTIES.addRelation(IRelationship.Kind.ADVICE);
+//             CROSSCUTTING_VIEW_PROPERTIES.addRelation(IRelationship.Kind.ADVICE);
+//        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.METHOD_CALL_SITE_RELATION);
+//        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.CONSTRUCTOR_RELATION);
+//        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.CONSTRUCTOR_CALL_SITE_RELATION);
+//        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.HANDLER_RELATION);
+//        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.INITIALIZER_RELATION);
+//        CROSSCUTTING_VIEW_PROPERTIES.addRelation(AdviceAssociation.FIELD_ACCESS_RELATION);
+//
+//        INHERITANCE_VIEW_PROPERTIES.addRelation(InheritanceAssociation.IMPLEMENTS_RELATION);
+//        INHERITANCE_VIEW_PROPERTIES.addRelation(InheritanceAssociation.INHERITS_MEMBERS_RELATION);
+//        INHERITANCE_VIEW_PROPERTIES.addRelation(InheritanceAssociation.INHERITS_RELATION);
        
        DECLARATION_VIEW_PROPERTIES.setRelations(Ajde.getDefault().getStructureViewManager().getAvailableRelations());
 
index 814d48e045022a3cb3dba44f951551a5f99ec5c1..9dfd6bb5096a7c3b17b6b4d2c9dfec8ce786061d 100644 (file)
      
 package org.aspectj.ajde.ui.swing;
 
-import java.awt.event.ActionEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.AbstractAction;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
+import java.awt.event.*;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.event.*;
 import javax.swing.tree.TreePath;
 
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author  Mik Kersten
@@ -61,20 +52,21 @@ class BrowserViewTreeListener implements TreeSelectionListener, MouseListener {
     public void singleClickNavigation(MouseEvent e) {
         SwingTreeViewNode treeNode = (SwingTreeViewNode)tree.getLastSelectedPathComponent();
         if (treeNode != null && !e.isControlDown() && !e.isShiftDown() && e.getModifiers() != 4) {
-            StructureNode currNode = (StructureNode)treeNode.getUserObject();
-            if (currNode instanceof ProgramElementNode && !e.isControlDown()
+            IProgramElement currNode = (IProgramElement)treeNode.getUserObject();
+            if (currNode instanceof IProgramElement && !e.isControlDown()
                 && !e.isShiftDown() && e.getModifiers() != 4) {
                 //AjdeUIManager.getDefault().getViewManager().showNodeInMasterView((ProgramElementNode)currNode);
                 //if (AjdeUIManager.getDefault().getViewManager().isSplitViewMode()) {
                 //    AjdeUIManager.getDefault().getViewManager().showNodeInSlaveView((ProgramElementNode)currNode);
                 //}
-            } else if (currNode instanceof LinkNode) {
+            } 
+//             else if (currNode instanceof LinkNode) {
                 //if (!AjdeUIManager.getDefault().getViewManager().isSplitViewMode()) {
                 //    AjdeUIManager.getDefault().getViewManager().showNodeInMasterView((LinkNode)currNode);
                 //} else {
                 //    AjdeUIManager.getDefault().getViewManager().showNodeInSlaveView(((LinkNode)currNode).getProgramElementNode());
                 //}
-           }
+//           }
         }
     }
 
@@ -82,18 +74,19 @@ class BrowserViewTreeListener implements TreeSelectionListener, MouseListener {
             int clickCount = e.getClickCount();
             SwingTreeViewNode treeNode = (SwingTreeViewNode)tree.getLastSelectedPathComponent();
             if (treeNode != null) {
-                StructureNode currNode = (StructureNode)treeNode.getUserObject();
-                if (currNode instanceof ProgramElementNode && !e.isControlDown() && !e.isShiftDown()
+                IProgramElement currNode = (IProgramElement)treeNode.getUserObject();
+                if (currNode instanceof IProgramElement && !e.isControlDown() && !e.isShiftDown()
                     && e.getModifiers() != 4) {
                     //AjdeUIManager.getDefault().getViewManager().showNodeInMasterView(((LinkNode)currNode).getProgramElementNode());
                     //AjdeUIManager.getDefault().getViewManager().showNodeInSlaveView(((LinkNode)currNode).getProgramElementNode());
-                } else if (currNode instanceof LinkNode) {
-                    if (clickCount == 1) {
-                        //AjdeUIManager.getDefault().getViewManager().showLink((LinkNode)currNode);
-                    } else if (clickCount == 2) {
-                        //navigationAction((ProgramElementNode)((LinkNode)currNode).getProgramElementNode(), true, true);
-                    }
-                }
+                } 
+//                else if (currNode instanceof LinkNode) {
+//                    if (clickCount == 1) {
+//                        //AjdeUIManager.getDefault().getViewManager().showLink((LinkNode)currNode);
+//                    } else if (clickCount == 2) {
+//                        //navigationAction((ProgramElementNode)((LinkNode)currNode).getProgramElementNode(), true, true);
+//                    }
+//                }
             }
         }
 
@@ -107,14 +100,14 @@ class BrowserViewTreeListener implements TreeSelectionListener, MouseListener {
             TreePath[] selectionPaths = tree.getSelectionPaths();
             final List signatures = new ArrayList();
             for (int i = 0; i < selectionPaths.length; i++) {
-                StructureNode currNode = (StructureNode)((SwingTreeViewNode)selectionPaths[i].getLastPathComponent()).getUserObject();
-                if (currNode instanceof LinkNode || currNode instanceof ProgramElementNode) {
-                    signatures.add(currNode);
-                }
+                IProgramElement currNode = (IProgramElement)((SwingTreeViewNode)selectionPaths[i].getLastPathComponent()).getUserObject();
+//                if (currNode instanceof LinkNode || currNode instanceof IProgramElement) {
+//                    signatures.add(currNode);
+//                }
             }
 
             JPopupMenu popup = new JPopupMenu();
-            JMenuItem showSourcesItem = new JMenuItem("Display sources", AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.CODE));
+            JMenuItem showSourcesItem = new JMenuItem("Display sources", AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.CODE));
             showSourcesItem.setFont(new java.awt.Font("Dialog", 0, 11));
             showSourcesItem.addActionListener(new AbstractAction() {
                 public void actionPerformed(ActionEvent e) {
@@ -123,11 +116,11 @@ class BrowserViewTreeListener implements TreeSelectionListener, MouseListener {
 //                                     public void showSourcesNodes(java.util.List nodes) {
 //                                             for (Iterator it = nodes.iterator(); it.hasNext(); ) {
 //                                                     ProgramElementNode currNode = null;
-//                                                     StructureNode structureNode = (StructureNode)it.next();
-//                                                     if (structureNode instanceof LinkNode) {
-//                                                             currNode = ((LinkNode)structureNode).getProgramElementNode();
+//                                                     IProgramElement IProgramElement = (IProgramElement)it.next();
+//                                                     if (IProgramElement instanceof LinkNode) {
+//                                                             currNode = ((LinkNode)IProgramElement).getProgramElementNode();
 //                                                     } else {
-//                                                             currNode = (ProgramElementNode)structureNode;
+//                                                             currNode = (ProgramElementNode)IProgramElement;
 //                                                     }
 //                                                     ISourceLocation sourceLoc = currNode.getSourceLocation();
 //                                                     if (null != sourceLoc) {
@@ -143,7 +136,7 @@ class BrowserViewTreeListener implements TreeSelectionListener, MouseListener {
             popup.add(showSourcesItem);
 
             popup.addSeparator();
-            JMenuItem generatePCD = new JMenuItem("Pointcut Wizard (alpha)...", AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.POINTCUT));
+            JMenuItem generatePCD = new JMenuItem("Pointcut Wizard (alpha)...", AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.POINTCUT));
             generatePCD.setFont(new java.awt.Font("Dialog", 0, 11));
             generatePCD.addActionListener(new AbstractAction() {
                 public void actionPerformed(ActionEvent e) {
index 6ad79052a4da2ed577bf38965227792230971843..ebb9319ef044121b14500e514dd0caff52df42b7 100644 (file)
@@ -24,7 +24,7 @@ import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 
 public class BuildConfigPopupMenu extends JPopupMenu {
 
@@ -47,7 +47,7 @@ public class BuildConfigPopupMenu extends JPopupMenu {
                                        action.actionPerformed(e);
                                        }
                        });
-               buildItem.setIcon((Icon)AjdeUIManager.getDefault().getIconRegistry().getStructureIcon(ProgramElementNode.Kind.FILE_LST).getIconResource());
+               buildItem.setIcon((Icon)AjdeUIManager.getDefault().getIconRegistry().getStructureIcon(IProgramElement.Kind.FILE_LST).getIconResource());
                this.add(buildItem);
                }
        }
index 875ba9ed1cf7211a7aa56637d766b9c751369ff6..decccab659a33f7f1f909ab711dba8c76a990f6d 100644 (file)
 
 package org.aspectj.ajde.ui.swing;
 
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
+import javax.swing.*;
 
-import org.aspectj.ajde.ui.AbstractIcon;
-import org.aspectj.ajde.ui.AbstractIconRegistry;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.Relation;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.asm.*;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * Default icons.  Override behavior for custom icons.
@@ -110,32 +108,32 @@ public class IconRegistry extends AbstractIconRegistry {
     public Icon getMergeStructureViewIcon() { return MERGE_STRUCTURE_VIEW; }
        public Icon getStructureViewIcon() { return STRUCTURE_VIEW; }
 
-    public Icon getAssociationSwingIcon(Relation relation) {
+    public Icon getAssociationSwingIcon(IRelationship.Kind relation) {
                return convertToSwingIcon(getRelationIcon(relation));   
     }
     
-       protected AbstractIcon getStructureIcon(ProgramElementNode.Kind kind, ProgramElementNode.Accessibility accessibility) {
+       protected AbstractIcon getStructureIcon(IProgramElement.Kind kind, IProgramElement.Accessibility accessibility) {
                return getStructureIcon(kind);  
        }
     
-    public Icon getStructureSwingIcon(ProgramElementNode.Kind kind, ProgramElementNode.Accessibility accessibility) { 
+    public Icon getStructureSwingIcon(IProgramElement.Kind kind, IProgramElement.Accessibility accessibility) { 
                return convertToSwingIcon(getStructureIcon(kind, accessibility));       
     }
        
-       public Icon getStructureSwingIcon(ProgramElementNode.Kind kind) {
+       public Icon getStructureSwingIcon(IProgramElement.Kind kind) {
                return convertToSwingIcon(getStructureIcon(kind));
        }
 
-       public Icon getAccessibilitySwingIcon(ProgramElementNode.Accessibility accessibility) {
-               if (accessibility == ProgramElementNode.Accessibility.PUBLIC) {
+       public Icon getAccessibilitySwingIcon(IProgramElement.Accessibility accessibility) {
+               if (accessibility == IProgramElement.Accessibility.PUBLIC) {
                        return ACCESSIBILITY_PUBLIC;
-               } else if (accessibility == ProgramElementNode.Accessibility.PACKAGE) {
+               } else if (accessibility == IProgramElement.Accessibility.PACKAGE) {
                        return ACCESSIBILITY_PACKAGE;
-               } else if (accessibility == ProgramElementNode.Accessibility.PROTECTED) {
+               } else if (accessibility == IProgramElement.Accessibility.PROTECTED) {
                        return ACCESSIBILITY_PROTECTED;
-               } else if (accessibility == ProgramElementNode.Accessibility.PRIVATE) {
+               } else if (accessibility == IProgramElement.Accessibility.PRIVATE) {
                        return ACCESSIBILITY_PRIVATE;
-               } else if (accessibility == ProgramElementNode.Accessibility.PRIVILEGED) {
+               } else if (accessibility == IProgramElement.Accessibility.PRIVILEGED) {
                        return ACCESSIBILITY_PRIVILEGED;
                } else {
                        return null;
index 045f361a367457747a737a2069b9e5eb168063e8..bfd469a6dc31f22edce3ec4c713304b7629e128b 100644 (file)
@@ -21,7 +21,7 @@ import java.util.*;
 import javax.swing.*;
 
 import org.aspectj.ajde.ui.*;
-import org.aspectj.asm.InheritanceAssociation;
+import org.aspectj.asm.IRelationship;
 
 /**
  * @author Mik Kersten
@@ -69,7 +69,7 @@ class PointcutWizard extends JFrame {
     private Map getViewProperties() {
         Map views = new HashMap();
         GlobalViewProperties INHERITANCE_VIEW = new GlobalViewProperties(StructureViewProperties.Hierarchy.INHERITANCE);
-        INHERITANCE_VIEW.addRelation(InheritanceAssociation.INHERITS_RELATION);
+        INHERITANCE_VIEW.addRelation(IRelationship.Kind.INHERITANCE);
         views.put(INHERITANCE_VIEW.toString(), INHERITANCE_VIEW);
         return views;
     }
index 4ec5e8ff064983fd8f1fe2f118d3b35b24b6c777..afdf6ba520c0c98c169f93798dbfd56a03d11e6a 100644 (file)
@@ -32,9 +32,9 @@ import javax.swing.border.Border;
 import org.aspectj.ajde.Ajde;
 import org.aspectj.ajde.ui.StructureView;
 import org.aspectj.ajde.ui.StructureViewProperties;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureModelListener;
+import org.aspectj.asm.IStructureModelListener;
 
 public class SimpleStructureViewToolPanel extends JPanel {
 
@@ -60,7 +60,7 @@ public class SimpleStructureViewToolPanel extends JPanel {
     BorderLayout borderLayout3 = new BorderLayout();
     BorderLayout borderLayout4 = new BorderLayout();
 
-    public final StructureModelListener MODEL_LISTENER = new StructureModelListener() {
+    public final IStructureModelListener MODEL_LISTENER = new IStructureModelListener() {
         public void modelUpdated(StructureModel model) {
                        String path = Ajde.getDefault().getConfigurationManager().getActiveConfigFile();
                        String fileName = "<no active config>";
@@ -218,7 +218,7 @@ public class SimpleStructureViewToolPanel extends JPanel {
                        hideNonAJ_button.setBorder(AjdeWidgetStyles.LOWERED_BEVEL_BORDER);
                        hideNonAJEnabled = true;
                        currentView.getViewProperties().setFilteredMemberKinds(
-                               ProgramElementNode.Kind.getNonAJMemberKinds()
+                               IProgramElement.Kind.getNonAJMemberKinds()
                        );
                }
                Ajde.getDefault().getStructureViewManager().refreshView(currentView);
index 1ab612a80b492fe6d2916e0b92b55b547e3cea12..29871bf8d571dcc14ce287b2ed38ca5de2c55aa4 100644 (file)
@@ -19,21 +19,11 @@ import java.util.ArrayList;
 
 import javax.swing.SwingUtilities;
 import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreePath;
+import javax.swing.tree.*;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.ajde.ui.AbstractIcon;
-import org.aspectj.ajde.ui.GlobalStructureView;
-import org.aspectj.ajde.ui.StructureView;
-import org.aspectj.ajde.ui.StructureViewProperties;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.RelationNode;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.asm.*;
 
 /**
  * @author  Mik Kersten
@@ -64,24 +54,24 @@ class StructureTreeManager {
         structureTree.addMouseListener((MouseListener)treeListener);
     }
 
-       public void highlightNode(ProgramElementNode node) {
+       public void highlightNode(IProgramElement node) {
                highlightNode((SwingTreeViewNode)structureTree.getModel().getRoot(), node);
        }
 
-    public StructureNode getSelectedStructureNode() {
-        return (StructureNode)((SwingTreeViewNode)structureTree.getLastSelectedPathComponent()).getUserObject();
+    public IProgramElement getSelectedIProgramElement() {
+        return (IProgramElement)((SwingTreeViewNode)structureTree.getLastSelectedPathComponent()).getUserObject();
     }
 
     public void scrollToHighlightedNode() {
         structureTree.scrollPathToVisible(structureTree.getSelectionPath());
     }
 
-    private void highlightNode(SwingTreeViewNode parent, ProgramElementNode node) {
+    private void highlightNode(SwingTreeViewNode parent, IProgramElement node) {
         for (int i = 0; i < parent.getChildCount(); i++) {
             SwingTreeViewNode currNode = (SwingTreeViewNode)parent.getChildAt(i);
-            StructureNode sNode = (StructureNode)currNode.getUserObject();
-            if (sNode instanceof ProgramElementNode &&
-                ((ProgramElementNode)sNode).equals(node)) {
+            IProgramElement sNode = (IProgramElement)currNode.getUserObject();
+            if (sNode instanceof IProgramElement &&
+                ((IProgramElement)sNode).equals(node)) {
                 TreePath path = new TreePath(currNode.getPath());
                 structureTree.setSelectionPath(path);
                 int currRow = structureTree.getRowForPath(path);
@@ -146,11 +136,11 @@ class StructureTreeManager {
         for (int i = 0; i < structureTree.getRowCount(); i++) {
             TreePath path = structureTree.getPathForRow(i);
             SwingTreeViewNode node = (SwingTreeViewNode)path.getLastPathComponent();
-            if (node.getUserObject() instanceof ProgramElementNode) {
-                   ProgramElementNode pNode = (ProgramElementNode)node.getUserObject();
-                   ProgramElementNode.Kind kind = pNode.getProgramElementKind();
-                   if (kind == ProgramElementNode.Kind.PROJECT
-                                       || kind == ProgramElementNode.Kind.PACKAGE) {
+            if (node.getUserObject() instanceof IProgramElement) {
+                   IProgramElement pNode = (IProgramElement)node.getUserObject();
+                   IProgramElement.Kind kind = pNode.getKind();
+                   if (kind == IProgramElement.Kind.PROJECT
+                                       || kind == IProgramElement.Kind.PACKAGE) {
                        structureTree.expandPath(path);
                    } else {
                        structureTree.collapsePath(path);
@@ -166,7 +156,7 @@ class StructureTreeManager {
         for (int i = 0; i < structureTree.getRowCount(); i++) {
             TreePath path = structureTree.getPathForRow(i);
             SwingTreeViewNode node = (SwingTreeViewNode)path.getLastPathComponent();
-            if (path.getPath().length-1 > depth || node.getUserObject() instanceof RelationNode) {
+            if (path.getPath().length-1 > depth || node.getUserObject() instanceof IRelationship) {
                 structureTree.collapsePath(path);
             } else {
                 structureTree.expandPath(path);
@@ -371,7 +361,7 @@ class StructureTreeManager {
 //                }
 
 //    public ProgramElementNode getRootProgramElementNode() {
-//        StructureNode node = (StructureNode)((SwingTreeViewNode)structureTree.getModel().getRoot()).getUserObject();
+//        IProgramElement node = (IProgramElement)((SwingTreeViewNode)structureTree.getModel().getRoot()).getUserObject();
 //        if (node instanceof ProgramElementNode) {
 //            return (ProgramElementNode)node;
 //        } else {
@@ -383,7 +373,7 @@ class StructureTreeManager {
 //     * @todo    HACK: this is a workaround and can break
 //     */
 //    private static ProgramElementNode mapResult = null;
-//    private ProgramElementNode getNodeForLink(LinkNode node, StructureNode rootNode) {
+//    private ProgramElementNode getNodeForLink(LinkNode node, IProgramElement rootNode) {
 //        ProgramElementNode result = null;
 //        if (rootNode instanceof ProgramElementNode &&
 //            ((ProgramElementNode)rootNode).getName().equals(node.getProgramElementNode().getName())) {
@@ -391,7 +381,7 @@ class StructureTreeManager {
 //        } else {
 //            ProgramElementNode linkedNode = node.getProgramElementNode();
 //            for (Iterator it = rootNode.getChildren().iterator(); it.hasNext(); ) {
-//                StructureNode child = (StructureNode)it.next();
+//                IProgramElement child = (IProgramElement)it.next();
 //                getNodeForLink(node, child);
 //            }
 //        }
@@ -400,14 +390,14 @@ class StructureTreeManager {
 
 //    private void sortNodes(List nodes) {
 //        if (sortNodes) {
-//            Collections.sort(nodes, structureNodeComparator);
+//            Collections.sort(nodes, IProgramElementComparator);
 //        }
 //    }
     
-//     private class StructureNodeComparator implements Comparator {
+//     private class IProgramElementComparator implements Comparator {
 //             public int compare(Object o1, Object o2) {
-//                     StructureNode t1 = (StructureNode) ((SwingTreeViewNode) o1).getUserObject();
-//                     StructureNode t2 = (StructureNode) ((SwingTreeViewNode) o2).getUserObject();
+//                     IProgramElement t1 = (IProgramElement) ((SwingTreeViewNode) o1).getUserObject();
+//                     IProgramElement t2 = (IProgramElement) ((SwingTreeViewNode) o2).getUserObject();
 //                     if (t1 instanceof ProgramElementNode && t2 instanceof ProgramElementNode) {
 //                             ProgramElementNode p1 = (ProgramElementNode) t1;
 //                             ProgramElementNode p2 = (ProgramElementNode) t2;
index 89ece89e3af18046972bdb54032c0a4fdd746dca..ed93d070620bdfe875bd058133959c934447f3b6 100644 (file)
 
 package org.aspectj.ajde.ui.swing;
 
-import java.awt.BorderLayout;
-import java.awt.Color;
+import java.awt.*;
 import java.util.Iterator;
 
-import javax.swing.BorderFactory;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.border.BevelBorder;
-import javax.swing.border.Border;
+import javax.swing.*;
+import javax.swing.border.*;
 
 import org.aspectj.ajde.Ajde;
-import org.aspectj.ajde.ui.FileStructureView;
-import org.aspectj.ajde.ui.StructureView;
-import org.aspectj.ajde.ui.StructureViewNode;
-import org.aspectj.ajde.ui.StructureViewRenderer;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * Represents the configuration of a structure view of the system, rendered
@@ -98,8 +90,8 @@ public class StructureViewPanel extends JPanel implements StructureViewRenderer
 
        public void setActiveNode(StructureViewNode node, int lineOffset) {
                if (node == null) return;
-               if (!(node.getStructureNode() instanceof ProgramElementNode)) return;
-               ProgramElementNode pNode = (ProgramElementNode)node.getStructureNode();
+               if (!(node.getStructureNode() instanceof IProgramElement)) return;
+               IProgramElement pNode = (IProgramElement)node.getStructureNode();
                treeManager.highlightNode(pNode);
                if (pNode.getSourceLocation() != null) {
                        Ajde.getDefault().getEditorAdapter().showSourceLine(
@@ -112,9 +104,9 @@ public class StructureViewPanel extends JPanel implements StructureViewRenderer
 
        public void highlightActiveNode() {
                if (currentView.getActiveNode() == null) return;
-               StructureNode node = currentView.getActiveNode().getStructureNode();
-               if (node instanceof ProgramElementNode) {
-                       treeManager.highlightNode((ProgramElementNode)node);
+               IProgramElement node = currentView.getActiveNode().getStructureNode();
+               if (node instanceof IProgramElement) {
+                       treeManager.highlightNode((IProgramElement)node);
                }
        }
 
index 75810c5759819b150a018364a0d85f6b9669f42a..e1ca0bd75c59aea4026a567bc14a924e0a675862 100644 (file)
 
 package org.aspectj.ajde.ui.swing;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 import javax.swing.tree.DefaultMutableTreeNode;
 
-import org.aspectj.ajde.ui.AbstractIcon;
-import org.aspectj.ajde.ui.StructureViewNode;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.asm.*;
 
 /**
  * @author Mik Kersten
  */
 public class SwingTreeViewNode extends DefaultMutableTreeNode implements StructureViewNode {
 
-       private StructureNode structureNode;
+       private IProgramElement programElement;
        private AbstractIcon icon;
        
-       public SwingTreeViewNode(StructureNode structureNode, AbstractIcon icon, List children) {
-               super(structureNode, true);
-               this.structureNode = structureNode;
+       public SwingTreeViewNode(IProgramElement programElement, AbstractIcon icon, List children) {
+               super(programElement, true);
+               this.programElement = programElement;
                this.icon = icon;
                
                if (children != null) {
@@ -43,9 +40,22 @@ public class SwingTreeViewNode extends DefaultMutableTreeNode implements Structu
                        }
                }
        }
+
+       public SwingTreeViewNode(IRelationship relationship, AbstractIcon icon) {
+//             super(IProgramElement, true);
+               throw new RuntimeException("unimplemented");
+//             this.IProgramElement = IProgramElement;
+//             this.icon = icon;
+//             
+//             if (children != null) {
+//                     for (Iterator it = children.iterator(); it.hasNext(); ) { 
+//                             super.add((SwingTreeViewNode)it.next());        
+//                     }
+//             }
+       }
        
-       public StructureNode getStructureNode() {
-               return structureNode;   
+       public IProgramElement getStructureNode() {
+               return programElement;  
        }
        
        public AbstractIcon getIcon() {
index 440e2341f15fbc838eaebe23d84d6ac57ffabf86..9c45432d2c5f6755b52063d3405f75c31fec7c96 100644 (file)
@@ -16,10 +16,9 @@ package org.aspectj.ajde.ui.swing;
 
 import java.util.List;
 
-import org.aspectj.ajde.ui.AbstractIcon;
-import org.aspectj.ajde.ui.StructureViewNode;
-import org.aspectj.ajde.ui.StructureViewNodeFactory;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.ajde.ui.*;
+import org.aspectj.asm.*;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author Mik Kersten
@@ -30,7 +29,14 @@ public class SwingTreeViewNodeFactory extends StructureViewNodeFactory {
                super(iconRegistry);    
        }
        
-       protected StructureViewNode createConcreteNode(StructureNode node, AbstractIcon icon, List children) {
+       protected StructureViewNode createConcreteNode(IProgramElement node, AbstractIcon icon, List children) {
                return new SwingTreeViewNode(node, icon, children);
        }
+
+       protected StructureViewNode createConcreteNode(
+               IRelationship relationship,
+               AbstractIcon icon) {
+               return new SwingTreeViewNode(relationship, icon);
+       }
+
 }
index a2ba8a6012f62d9c744d96b3378380bb42ec1762..019c963615f3809d89c07a093e03c47663df668c 100644 (file)
 
 package org.aspectj.ajde.ui.swing;
 
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
+import java.awt.*;
 
-import javax.swing.Icon;
-import javax.swing.JTree;
+import javax.swing.*;
 import javax.swing.tree.DefaultTreeCellRenderer;
 
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.RelationNode;
-import org.aspectj.asm.StructureNode;
-import org.aspectj.bridge.IMessage;
-import org.aspectj.bridge.ISourceLocation;
+import org.aspectj.asm.*;
+import org.aspectj.bridge.*;
 
 /**
  * @author Mik Kersten
@@ -43,19 +36,19 @@ class SwingTreeViewNodeRenderer extends DefaultTreeCellRenderer {
                                                     boolean hasFocus) {
         if (treeNode == null) return null;        
         SwingTreeViewNode viewNode = (SwingTreeViewNode)treeNode;
-        StructureNode node = viewNode.getStructureNode();
+        IProgramElement node = viewNode.getStructureNode();
 
-        if (node instanceof LinkNode) {
-            ISourceLocation sourceLoc = ((LinkNode)node).getProgramElementNode().getSourceLocation();
-            if ((null != sourceLoc) 
-                && (null != sourceLoc.getSourceFile().getAbsolutePath())) {
-                setTextNonSelectionColor(AjdeWidgetStyles.LINK_NODE_COLOR);
-            } else {
-                setTextNonSelectionColor(AjdeWidgetStyles.LINK_NODE_NO_SOURCE_COLOR);
-            }
-        } else {
+//        if (node instanceof LinkNode) {
+//            ISourceLocation sourceLoc = ((LinkNode)node).getProgramElementNode().getSourceLocation();
+//            if ((null != sourceLoc) 
+//                && (null != sourceLoc.getSourceFile().getAbsolutePath())) {
+//                setTextNonSelectionColor(AjdeWidgetStyles.LINK_NODE_COLOR);
+//            } else {
+//                setTextNonSelectionColor(AjdeWidgetStyles.LINK_NODE_NO_SOURCE_COLOR);
+//            }
+//        } else {
                setTextNonSelectionColor(new Color(0, 0, 0));   
-        }
+//        }
         
         super.getTreeCellRendererComponent(tree, treeNode, sel, expanded, leaf, row, hasFocus);
         this.setFont(StructureTree.DEFAULT_FONT);
@@ -66,29 +59,30 @@ class SwingTreeViewNodeRenderer extends DefaultTreeCellRenderer {
                        setIcon(null);
                }
         
-        if (node instanceof ProgramElementNode) {
-               ProgramElementNode pNode = (ProgramElementNode)node;
-               if (pNode.isRunnable()) {
-                       //setIcon(AjdeUIManager.getDefault().getIconRegistry().getExecuteIcon());
-               }        
-               if (pNode.isImplementor()) {
-                       //this.setText("<implementor>");
-               }
-               if (pNode.isOverrider()) {
-                       //this.setText("<overrider>");
-               }
-        } else if (node instanceof RelationNode) {
-               this.setFont(new Font(this.getFont().getName(), Font.ITALIC, this.getFont().getSize()));
-        }
+        if (node instanceof IProgramElement) {
+               IProgramElement pNode = (IProgramElement)node;
+//             if (pNode.isRunnable()) {
+//                     //setIcon(AjdeUIManager.getDefault().getIconRegistry().getExecuteIcon());
+//             }        
+//             if (pNode.isImplementor()) {
+//                     //this.setText("<implementor>");
+//             }
+//             if (pNode.isOverrider()) {
+//                     //this.setText("<overrider>");
+//             }
+               
+                       if (node.getMessage() != null) {
+                               if (node.getMessage().getKind().equals(IMessage.WARNING)) {
+                                       setIcon(AjdeUIManager.getDefault().getIconRegistry().getWarningIcon());
+                               } else if (node.getMessage().getKind().equals(IMessage.ERROR)) {
+                                       setIcon(AjdeUIManager.getDefault().getIconRegistry().getErrorIcon());
+                               } else {
+                                       setIcon(AjdeUIManager.getDefault().getIconRegistry().getInfoIcon());
+                               }
+                       }
 
-        if (node.getMessage() != null) {
-               if (node.getMessage().getKind().equals(IMessage.WARNING)) {
-                       setIcon(AjdeUIManager.getDefault().getIconRegistry().getWarningIcon());
-               } else if (node.getMessage().getKind().equals(IMessage.ERROR)) {
-                       setIcon(AjdeUIManager.getDefault().getIconRegistry().getErrorIcon());
-               } else {
-                       setIcon(AjdeUIManager.getDefault().getIconRegistry().getInfoIcon());
-               }
+        } else if (node instanceof IRelationship) {
+               this.setFont(new Font(this.getFont().getName(), Font.ITALIC, this.getFont().getSize()));
         }
                
         return this;
index 0b0eb19dbb34e34eda2798629993fabd5e6437b9..13b65d4b05cd32f0f274157500c3804b56c280b1 100644 (file)
@@ -46,7 +46,7 @@ import org.aspectj.ajde.ui.BuildConfigEditor;
 import org.aspectj.ajde.ui.BuildConfigModel;
 import org.aspectj.ajde.ui.BuildConfigNode;
 import org.aspectj.ajde.ui.InvalidResourceException;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 /**
  * UI for editing build configuration (".lst") files via a graphical tree-based
  * representation.
@@ -246,15 +246,15 @@ public class TreeViewBuildConfigEditor extends JPanel implements BuildConfigEdit
             //}
             BuildConfigNode.Kind kind = ctn.getModelNode().getBuildConfigNodeKind();
             if (kind.equals(BuildConfigNode.Kind.FILE_ASPECTJ)) {
-               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.FILE_ASPECTJ));      
+               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.FILE_ASPECTJ)); 
             } else if (kind.equals(BuildConfigNode.Kind.FILE_JAVA)) {
-               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.FILE_JAVA)); 
+               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.FILE_JAVA));    
             } else if (kind.equals(BuildConfigNode.Kind.FILE_LST)) {
-               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.FILE_LST));  
+               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.FILE_LST));     
             } else if (kind.equals(BuildConfigNode.Kind.DIRECTORY)) {
-               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(ProgramElementNode.Kind.PACKAGE));   
+               setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.PACKAGE));      
             } else {
-               setIcon((Icon)AjdeUIManager.getDefault().getIconRegistry().getStructureIcon(ProgramElementNode.Kind.ERROR).getIconResource());  
+               setIcon((Icon)AjdeUIManager.getDefault().getIconRegistry().getStructureIcon(IProgramElement.Kind.ERROR).getIconResource());     
                p.remove(cbox);
             }
            
index e1e53be977581bf258a1210bc041e8a65524f4bb..2ba60fbf014ca008934990ddd0978431a86b8387 100644 (file)
@@ -65,7 +65,7 @@ aspect AdviceNamingCoverage {
        int around(int i) throws SizeException: namedWithOneArg(i) { return proceed(i); }
        
        before(): named() { }   
-       before(int i): call(* XXX.mumble()) && named() && namedWithOneArg(i) { }        
+       before(int i): call(* *.mumble()) && named() && namedWithOneArg(i) { }  
        before(int i): named() && call(* *.mumble()) && namedWithOneArg(i) { }  
        
        before(): call(* *.mumble()) { }
index fae756a9c7525a657669539af48b886e0df1b778..9857809b929dd75140b8615a9af7120d5162efe4 100644 (file)
@@ -1 +1,2 @@
-ModelCoverage.java\r
+ModelCoverage.java
+pkg/InPackage.java
diff --git a/ajde/testdata/examples/coverage/pkg/InPackage.java b/ajde/testdata/examples/coverage/pkg/InPackage.java
new file mode 100644 (file)
index 0000000..3e3bc8a
--- /dev/null
@@ -0,0 +1,4 @@
+
+package pkg;
+
+public interface InPackage { }
\ No newline at end of file
index f5fa1fc988599667505bb65e65ff44cb4facbcf7..e6be0bc1266c95cf489bee41198af596174cb645 100644 (file)
@@ -28,6 +28,7 @@ public class AjdeTests extends TestCase {
         suite.addTestSuite(VersionTest.class); 
                suite.addTestSuite(CompilerMessagesTest.class);
                suite.addTestSuite(AsmDeclarationsTest.class);
+               suite.addTestSuite(AsmRelationshipsTest.class);
                suite.addTestSuite(ResourceCopyTestCase.class);
                
         //$JUnit-END$
index 81f054f6b619c10fab0bc22f9d9743c525504c6d..ea4b060bc1b01e9de5200f12fdb9a44607feb014 100644 (file)
@@ -1,4 +1,3 @@
-
 /* *******************************************************************
  * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
  * All rights reserved. 
@@ -15,10 +14,10 @@ import java.util.Iterator;
 
 import org.aspectj.ajdt.internal.core.builder.AsmNodeFormatter;
 import org.aspectj.asm.*;
-import org.aspectj.asm.ProgramElementNode.Kind;
+import org.aspectj.asm.IProgramElement.Kind;
 
 
-// TODO: check for return types
+// TODO: add tests for java kinds
 public class AsmDeclarationsTest extends AjdeTestCase {
 
        private StructureModel model = null;
@@ -26,66 +25,81 @@ public class AsmDeclarationsTest extends AjdeTestCase {
        private static final int DEC_MESSAGE_LENGTH = AsmNodeFormatter.MAX_MESSAGE_LENGTH;
 
        public AsmDeclarationsTest(String name) {
-               super(name);
+               super(name);  
+       }
+
+       public void testRoot() {
+               IProgramElement root = (IProgramElement)model.getRoot();
+               assertNotNull(root);
+               assertEquals(root.getName(), "coverage.lst");   
        }
+       
+       public void testFileInPackageAndDefaultPackage() {
+               IProgramElement root = model.getRoot();
+               assertEquals(root.getName(), "coverage.lst");   
+               IProgramElement pkg = (IProgramElement)root.getChildren().get(1);
+               assertEquals(pkg.getName(), "pkg");     
+               assertEquals(((IProgramElement)pkg.getChildren().get(0)).getName(), "InPackage.java");  
+               assertEquals(((IProgramElement)root.getChildren().get(0)).getName(), "ModelCoverage.java"); 
+       }  
 
        public void testDeclares() {
-               ProgramElementNode node = (ProgramElementNode)model.getRoot();
+               IProgramElement node = (IProgramElement)model.getRoot();
                assertNotNull(node);
        
-               ProgramElementNode aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "InterTypeDecCoverage");
+               IProgramElement aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "InterTypeDecCoverage");
                assertNotNull(aspect);
                
                String decErrMessage = "declare error: \"Illegal construct..\"";
-               ProgramElementNode decErrNode = model.findNode(aspect, ProgramElementNode.Kind.DECLARE_ERROR, decErrMessage);
+               IProgramElement decErrNode = model.findNode(aspect, IProgramElement.Kind.DECLARE_ERROR, decErrMessage);
                assertNotNull(decErrNode);
                assertEquals(decErrNode.getName(), decErrMessage);
                
                String decWarnMessage = "declare warning: \"Illegal construct..\"";
-               ProgramElementNode decWarnNode = model.findNode(aspect, ProgramElementNode.Kind.DECLARE_WARNING, decWarnMessage);
+               IProgramElement decWarnNode = model.findNode(aspect, IProgramElement.Kind.DECLARE_WARNING, decWarnMessage);
                assertNotNull(decWarnNode);
                assertEquals(decWarnNode.getName(), decWarnMessage);    
                
                String decParentsMessage = "declare parents: Point";
-               ProgramElementNode decParentsNode = model.findNode(aspect, ProgramElementNode.Kind.DECLARE_PARENTS, decParentsMessage);
+               IProgramElement decParentsNode = model.findNode(aspect, IProgramElement.Kind.DECLARE_PARENTS, decParentsMessage);
                assertNotNull(decParentsNode);          
                assertEquals(decParentsNode.getName(), decParentsMessage);      
                        
                String decParentsPtnMessage = "declare parents: Point+";
-               ProgramElementNode decParentsPtnNode = model.findNode(aspect, ProgramElementNode.Kind.DECLARE_PARENTS, decParentsPtnMessage);
+               IProgramElement decParentsPtnNode = model.findNode(aspect, IProgramElement.Kind.DECLARE_PARENTS, decParentsPtnMessage);
                assertNotNull(decParentsPtnNode);               
                assertEquals(decParentsPtnNode.getName(), decParentsPtnMessage);                        
 
                String decParentsTPMessage = "declare parents: <type pattern>";
-               ProgramElementNode decParentsTPNode = model.findNode(aspect, ProgramElementNode.Kind.DECLARE_PARENTS, decParentsTPMessage);
+               IProgramElement decParentsTPNode = model.findNode(aspect, IProgramElement.Kind.DECLARE_PARENTS, decParentsTPMessage);
                assertNotNull(decParentsTPNode);                
                assertEquals(decParentsTPNode.getName(), decParentsTPMessage);
                
                String decSoftMessage = "declare soft: SizeException";
-               ProgramElementNode decSoftNode = model.findNode(aspect, ProgramElementNode.Kind.DECLARE_SOFT, decSoftMessage);
+               IProgramElement decSoftNode = model.findNode(aspect, IProgramElement.Kind.DECLARE_SOFT, decSoftMessage);
                assertNotNull(decSoftNode);             
                assertEquals(decSoftNode.getName(), decSoftMessage);            
 
                String decPrecMessage = "declare precedence: AdviceCoverage, InterTypeDecCoverage, <type pattern>";
-               ProgramElementNode decPrecNode = model.findNode(aspect, ProgramElementNode.Kind.DECLARE_PRECEDENCE, decPrecMessage);
+               IProgramElement decPrecNode = model.findNode(aspect, IProgramElement.Kind.DECLARE_PRECEDENCE, decPrecMessage);
                assertNotNull(decPrecNode);             
                assertEquals(decPrecNode.getName(), decPrecMessage);    
        } 
 
        public void testInterTypeMemberDeclares() {
-               ProgramElementNode node = (ProgramElementNode)model.getRoot();
+               IProgramElement node = (IProgramElement)model.getRoot();
                assertNotNull(node);
        
-               ProgramElementNode aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "InterTypeDecCoverage");
+               IProgramElement aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "InterTypeDecCoverage");
                assertNotNull(aspect);
                
                String fieldMsg = "Point.xxx";
-               ProgramElementNode fieldNode = model.findNode(aspect, ProgramElementNode.Kind.INTER_TYPE_FIELD, fieldMsg);
+               IProgramElement fieldNode = model.findNode(aspect, IProgramElement.Kind.INTER_TYPE_FIELD, fieldMsg);
                assertNotNull(fieldNode);               
                assertEquals(fieldNode.getName(), fieldMsg);
 
                String methodMsg = "Point.check(int, Line)";
-               ProgramElementNode methodNode = model.findNode(aspect, ProgramElementNode.Kind.INTER_TYPE_METHOD, methodMsg);
+               IProgramElement methodNode = model.findNode(aspect, IProgramElement.Kind.INTER_TYPE_METHOD, methodMsg);
                assertNotNull(methodNode);              
                assertEquals(methodNode.getName(), methodMsg);
 
@@ -97,19 +111,19 @@ public class AsmDeclarationsTest extends AjdeTestCase {
        }
 
        public void testPointcuts() {
-               ProgramElementNode node = (ProgramElementNode)model.getRoot();
+               IProgramElement node = (IProgramElement)model.getRoot();
                assertNotNull(node);
        
-               ProgramElementNode aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "AdviceNamingCoverage");
+               IProgramElement aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "AdviceNamingCoverage");
                assertNotNull(aspect);          
        
                String ptct = "named()";
-               ProgramElementNode ptctNode = model.findNode(aspect, ProgramElementNode.Kind.POINTCUT, ptct);
+               IProgramElement ptctNode = model.findNode(aspect, IProgramElement.Kind.POINTCUT, ptct);
                assertNotNull(ptctNode);                
                assertEquals(ptctNode.getName(), ptct);         
 
                String params = "namedWithArgs(int, int)";
-               ProgramElementNode paramsNode = model.findNode(aspect, ProgramElementNode.Kind.POINTCUT, params);
+               IProgramElement paramsNode = model.findNode(aspect, IProgramElement.Kind.POINTCUT, params);
                assertNotNull(paramsNode);              
                assertEquals(paramsNode.getName(), params);     
 
@@ -117,57 +131,57 @@ public class AsmDeclarationsTest extends AjdeTestCase {
        }
 
        public void testAbstract() {
-               ProgramElementNode node = (ProgramElementNode)model.getRoot();
+               IProgramElement node = (IProgramElement)model.getRoot();
                assertNotNull(node);
        
-               ProgramElementNode aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "AbstractAspect");
+               IProgramElement aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "AbstractAspect");
                assertNotNull(aspect);  
                
                String abst = "abPtct()";
-               ProgramElementNode abstNode = model.findNode(aspect, ProgramElementNode.Kind.POINTCUT, abst);
+               IProgramElement abstNode = model.findNode(aspect, IProgramElement.Kind.POINTCUT, abst);
                assertNotNull(abstNode);                
                assertEquals(abstNode.getName(), abst);                 
        }
 
        public void testAdvice() {
-               ProgramElementNode node = (ProgramElementNode)model.getRoot();
+               IProgramElement node = (IProgramElement)model.getRoot();
                assertNotNull(node);
        
-               ProgramElementNode aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "AdviceNamingCoverage");
+               IProgramElement aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "AdviceNamingCoverage");
                assertNotNull(aspect);  
 
                String anon = "before(): <anonymous pointcut>";
-               ProgramElementNode anonNode = model.findNode(aspect, ProgramElementNode.Kind.ADVICE, anon);
+               IProgramElement anonNode = model.findNode(aspect, IProgramElement.Kind.ADVICE, anon);
                assertNotNull(anonNode);                
                assertEquals(anonNode.getName(), anon);                 
 
                String named = "before(): named..";
-               ProgramElementNode namedNode = model.findNode(aspect, ProgramElementNode.Kind.ADVICE, named);
+               IProgramElement namedNode = model.findNode(aspect, IProgramElement.Kind.ADVICE, named);
                assertNotNull(namedNode);               
                assertEquals(namedNode.getName(), named);               
 
                String namedWithOneArg = "around(int): namedWithOneArg..";
-               ProgramElementNode namedWithOneArgNode = model.findNode(aspect, ProgramElementNode.Kind.ADVICE, namedWithOneArg);
+               IProgramElement namedWithOneArgNode = model.findNode(aspect, IProgramElement.Kind.ADVICE, namedWithOneArg);
                assertNotNull(namedWithOneArgNode);             
                assertEquals(namedWithOneArgNode.getName(), namedWithOneArg);           
 
                String afterReturning = "afterReturning(int, int): namedWithArgs..";
-               ProgramElementNode afterReturningNode = model.findNode(aspect, ProgramElementNode.Kind.ADVICE, afterReturning);
+               IProgramElement afterReturningNode = model.findNode(aspect, IProgramElement.Kind.ADVICE, afterReturning);
                assertNotNull(afterReturningNode);              
                assertEquals(afterReturningNode.getName(), afterReturning);
 
                String around = "around(int): namedWithOneArg..";
-               ProgramElementNode aroundNode = model.findNode(aspect, ProgramElementNode.Kind.ADVICE, around);
+               IProgramElement aroundNode = model.findNode(aspect, IProgramElement.Kind.ADVICE, around);
                assertNotNull(aroundNode);              
                assertEquals(aroundNode.getName(), around);
 
                String compAnon = "before(int): <anonymous pointcut>..";
-               ProgramElementNode compAnonNode = model.findNode(aspect, ProgramElementNode.Kind.ADVICE, compAnon);
+               IProgramElement compAnonNode = model.findNode(aspect, IProgramElement.Kind.ADVICE, compAnon);
                assertNotNull(compAnonNode);            
                assertEquals(compAnonNode.getName(), compAnon);
 
                String compNamed = "before(int): named()..";
-               ProgramElementNode compNamedNode = model.findNode(aspect, ProgramElementNode.Kind.ADVICE, compNamed);
+               IProgramElement compNamedNode = model.findNode(aspect, IProgramElement.Kind.ADVICE, compNamed);
                assertNotNull(compNamedNode);           
                assertEquals(compNamedNode.getName(), compNamed);
        }
diff --git a/ajde/testsrc/org/aspectj/ajde/AsmRelationshipsTest.java b/ajde/testsrc/org/aspectj/ajde/AsmRelationshipsTest.java
new file mode 100644 (file)
index 0000000..6dd2a8e
--- /dev/null
@@ -0,0 +1,64 @@
+
+/* *******************************************************************
+ * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ * 
+ * ******************************************************************/
+
+package org.aspectj.ajde;
+
+import java.util.Iterator;
+
+import org.aspectj.ajdt.internal.core.builder.AsmNodeFormatter;
+import org.aspectj.asm.*;
+import org.aspectj.asm.IProgramElement.Kind;
+
+
+// TODO: check for return types
+public class AsmRelationshipsTest extends AjdeTestCase {
+
+       private StructureModel model = null;
+       private static final String CONFIG_FILE_PATH = "../examples/coverage/coverage.lst";
+
+       public AsmRelationshipsTest(String name) {
+               super(name);
+       }
+
+       public void testPointcuts() {
+               IProgramElement node = (IProgramElement)model.getRoot();
+               assertNotNull(node);
+                 
+               System.err.println("> root: " + node);
+               
+//     
+//             IProgramElement aspect = StructureModelManager.getDefault().getStructureModel().findNodeForClass(null, "AdviceNamingCoverage");
+//             assertNotNull(aspect);          
+       
+//             fail();
+               
+//             String ptct = "named()";
+//             IProgramElement ptctNode = model.findNode(aspect, IProgramElement.Kind.POINTCUT, ptct);
+//             assertNotNull(ptctNode);                
+//             assertEquals(ptctNode.getName(), ptct);         
+//
+//             String params = "namedWithArgs(int, int)";
+//             IProgramElement paramsNode = model.findNode(aspect, IProgramElement.Kind.POINTCUT, params);
+//             assertNotNull(paramsNode);              
+//             assertEquals(paramsNode.getName(), params);     
+       }
+
+       protected void setUp() throws Exception {
+               super.setUp("examples");
+               assertTrue("build success", doSynchronousBuild(CONFIG_FILE_PATH));      
+               model = StructureModelManager.getDefault().getStructureModel();
+       }
+
+       protected void tearDown() throws Exception {
+               super.tearDown();
+       }
+
+}
diff --git a/ajde/testsrc/org/aspectj/ajde/NullIdeErrorHandler.java b/ajde/testsrc/org/aspectj/ajde/NullIdeErrorHandler.java
new file mode 100644 (file)
index 0000000..35a8e74
--- /dev/null
@@ -0,0 +1,29 @@
+/* *******************************************************************
+ * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ * ******************************************************************/
+
+package org.aspectj.ajde;
+
+/**
+ * @author Mik Kersten
+ */
+public class NullIdeErrorHandler implements ErrorHandler {
+
+       public void handleWarning(String message) {
+               System.out.println("NullIde warning: " + message);
+       }
+
+       public void handleError(String message) {
+               System.out.println("NullIde error: " + message);
+       }
+
+       public void handleError(String message, Throwable t) {
+               System.out.println("NullIde error: " + message);
+               t.printStackTrace(System.out);
+       }
+}
index 06297be3f402cee9ec342c2e9e807156b2d07a83..61318014e166898e2df20c49167d275781daf8cb 100644 (file)
@@ -59,8 +59,9 @@ public class NullIdeManager {
                                uiAdapter,
                                new IconRegistry(),
                                nullFrame,
+                               new NullIdeProgressMonitor(),
+                               new NullIdeErrorHandler(),
                                true);  
-                               
                        //Ajde.getDefault().enableLogging( System.out );
                } catch (Throwable t) {
                        t.printStackTrace();
diff --git a/ajde/testsrc/org/aspectj/ajde/NullIdeProgressMonitor.java b/ajde/testsrc/org/aspectj/ajde/NullIdeProgressMonitor.java
new file mode 100644 (file)
index 0000000..afd31cb
--- /dev/null
@@ -0,0 +1,45 @@
+/* *******************************************************************
+ * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ * ******************************************************************/
+
+package org.aspectj.ajde;
+
+/**
+ * @author Mik Kersten
+ */
+public class NullIdeProgressMonitor implements BuildProgressMonitor {
+
+       public void start(String configFile) {
+//             System.out.println("> compiling: " + configFile);
+       }
+
+       public void setProgressText(String text) {
+
+       }
+
+       public void setProgressBarVal(int newVal) {
+
+       }
+
+       public void incrementProgressBarVal() {
+
+       }
+
+       public void setProgressBarMax(int maxVal) {
+
+       }
+
+       public int getProgressBarMax() {
+               return 0;
+       }
+
+       public void finish() {
+
+       }
+
+}
index 2b1275bb0db85ff4b81b800afab0d0cd382ade56..f290197e58813f184b80392efe2bfebd4401b0e4 100644 (file)
@@ -43,7 +43,7 @@ public class NullIdeTaskListManager implements TaskListManager {
         if (!hasWarning && IMessage.WARNING.isSameOrLessThan(message.getKind())) {
             hasWarning = true;
         }
-       System.out.println("> added sourceline task: " + message + ", file: " + message.getSourceLocation().getSourceFile().getAbsolutePath()
+       System.out.println("NullIde> task: " + message.getMessage() + ", file: " + message.getSourceLocation().getSourceFile().getAbsolutePath()
                + ": " +  message.getSourceLocation().getLine());
     }
    
@@ -51,7 +51,7 @@ public class NullIdeTaskListManager implements TaskListManager {
         if (!hasWarning && IMessage.WARNING.isSameOrLessThan(kind)) {
             hasWarning = true;
         }
-       System.out.println("> added project task: " + message + ", kind: " + kind);     
+       System.out.println("NullIde> task: " + message + ", kind: " + kind);    
     }
 
     public boolean hasWarning() {
index 3289a4bdecffdc9af208fb7309c814ed0bbc1257..e31d021a7eb9525f7bdcee74811d656b1e857405 100644 (file)
@@ -18,7 +18,7 @@ import org.aspectj.ajde.ui.*;
 public class NullIdeUIAdapter implements IdeUIAdapter {
        
        public void displayStatusInformation(String message) {
-               System.out.println("> NullIdeUIAdapter status : " + message);
+               System.out.println("NullIde> " + message);
        }
        
     public void resetGUI() {
index 8fb9178024bee3bb840b82da7d6246a3b3ed8a73..8e0a5227e6c6708ca6b3f4147fcc8d938331f34b 100644 (file)
@@ -18,8 +18,7 @@ import java.util.List;
 
 import junit.framework.TestSuite;
 
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.*;
 
 public class StructureModelRegressionTest extends AjdeTestCase {
 
@@ -54,14 +53,14 @@ public class StructureModelRegressionTest extends AjdeTestCase {
                        StructureModel savedModel = Ajde.getDefault().getStructureModelManager().getStructureModel();
                        //System.err.println( savedModel.getRoot().getClass() + ", " +  savedModel.getRoot());
                        
-                       // AMC This test will not pass as written until StructureNode defines
-                       // equals. The equals loic is commented out in the StructureNode
+                       // AMC This test will not pass as written until IProgramElement defines
+                       // equals. The equals loic is commented out in the IProgramElement
                        // class - adding it back in could have unforeseen system-wide
-                       // consequences, so I've defined a structureNodesEqual( ) helper
+                       // consequences, so I've defined a IProgramElementsEqual( ) helper
                        // method here instead.
-                       StructureNode rootNode = model.getRoot();
-                       StructureNode savedRootNode = savedModel.getRoot();
-                       return structureNodesEqual( rootNode, savedRootNode );
+                       IProgramElement rootNode = model.getRoot();
+                       IProgramElement savedRootNode = savedModel.getRoot();
+                       return IProgramElementsEqual( rootNode, savedRootNode );
                } else {
                        Ajde.getDefault().getStructureModelManager().writeStructureModel(lstFile);
                        return true;
@@ -69,7 +68,7 @@ public class StructureModelRegressionTest extends AjdeTestCase {
                //return true;
        }
 
-       private boolean structureNodesEqual( StructureNode s1, StructureNode s2 ) {
+       private boolean IProgramElementsEqual( IProgramElement s1, IProgramElement s2 ) {
          final boolean equal = true;
                if ( s1 == s2 ) return equal;
                if ( null == s1 || null == s2 ) return !equal;
@@ -85,9 +84,9 @@ public class StructureModelRegressionTest extends AjdeTestCase {
                        if (s1Kids == null || s2Kids == null) return !equal;                    
                        if (s1Kids.size() != s2Kids.size() ) return !equal;
                        for ( int k=0; k<s1Kids.size(); k++ ) {
-                               StructureNode k1 = (StructureNode) s1Kids.get(k);
-                               StructureNode k2 = (StructureNode) s2Kids.get(k);       
-                               if (!structureNodesEqual( k1, k2 )) return !equal;
+                               IProgramElement k1 = (IProgramElement) s1Kids.get(k);
+                               IProgramElement k2 = (IProgramElement) s2Kids.get(k);   
+                               if (!IProgramElementsEqual( k1, k2 )) return !equal;
                        }
                }
          return equal;         
index 9eec9987dc01f853a3a607d2ef965f61198ad42f..8dfc26c97f1ba945a5d07151a2178265cf01d8ea 100644 (file)
 
 package org.aspectj.ajde;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.util.Iterator;
 
 import junit.framework.TestSuite;
 
-import org.aspectj.asm.ModelWalker;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.*;
 
 /**
  * @author Mik Kersten
@@ -48,7 +44,7 @@ public class StructureModelTest extends AjdeTestCase {
 //  XXX this should work
 //     public void testFieldInitializerCorrespondence() throws IOException {
 //             File testFile = createFile("testdata/examples/figures-coverage/figures/Figure.java");   
-//             StructureNode node = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
+//             IProgramElement node = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
 //                     testFile.getCanonicalPath(), 28);
 //             assertTrue("find result", node != null) ;       
 //             ProgramElementNode pNode = (ProgramElementNode)node;
@@ -72,7 +68,7 @@ public class StructureModelTest extends AjdeTestCase {
 //             assertTrue("find associated node", foundNode != null) ;
 //             
 //             File pointFile = createFile("testdata/examples/figures-coverage/figures/primitives/planar/Point.java"); 
-//             StructureNode fieldNode = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
+//             IProgramElement fieldNode = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
 //                     pointFile.getCanonicalPath(), 12);              
 //             assertTrue("find result", fieldNode != null);
 //             
@@ -82,24 +78,24 @@ public class StructureModelTest extends AjdeTestCase {
 
        public void testRootForSourceFile() throws IOException {
                File testFile = openFile("figures-coverage/figures/Figure.java");       
-               StructureNode node = Ajde.getDefault().getStructureModelManager().getStructureModel().findRootNodeForSourceFile(
+               IProgramElement node = Ajde.getDefault().getStructureModelManager().getStructureModel().findRootNodeForSourceFile(
                        testFile.getCanonicalPath());
                assertTrue("find result", node != null) ;       
-               ProgramElementNode pNode = (ProgramElementNode)node;
-               String child = ((StructureNode)pNode.getChildren().get(0)).getName();
+               IProgramElement pNode = (IProgramElement)node;
+               String child = ((IProgramElement)pNode.getChildren().get(0)).getName();
         assertTrue("expected Figure got child " + child, child.equals("Figure"));
        }
 
        public void testPointcutName() throws IOException {
                File testFile = openFile("figures-coverage/figures/Main.java"); 
                //System.err.println("PointcutName, testFile: " + testFile.getCanonicalPath() + " exists: " + testFile.exists());
-               StructureNode node = Ajde.getDefault().getStructureModelManager().getStructureModel().findRootNodeForSourceFile(
+               IProgramElement node = Ajde.getDefault().getStructureModelManager().getStructureModel().findRootNodeForSourceFile(
                        testFile.getCanonicalPath());
                //System.err.println("   node: " + node);
                assertTrue("find result", node != null) ;       
-               ProgramElementNode pNode = (ProgramElementNode)((ProgramElementNode)node).getChildren().get(1);
-               ProgramElementNode pointcut = (ProgramElementNode)pNode.getChildren().get(0);
-               assertTrue("kind", pointcut.getProgramElementKind().equals(ProgramElementNode.Kind.POINTCUT));
+               IProgramElement pNode = (IProgramElement)((IProgramElement)node).getChildren().get(1);
+               IProgramElement pointcut = (IProgramElement)pNode.getChildren().get(0);
+               assertTrue("kind", pointcut.getKind().equals(IProgramElement.Kind.POINTCUT));
                assertTrue("found node: " + pointcut.getName(), pointcut.getName().equals("testptct()"));
        }
 
@@ -111,13 +107,13 @@ public class StructureModelTest extends AjdeTestCase {
        public void testFileNodeFind() throws IOException {
                File testFile = openFile("figures-coverage/figures/Main.java");
                //System.err.println("NodeFind, testFile: " + testFile.getCanonicalPath() + " exists: " + testFile.exists());
-               StructureNode node = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
+               IProgramElement node = Ajde.getDefault().getStructureModelManager().getStructureModel().findNodeForSourceLine(
                        testFile.getCanonicalPath(), 1);
                //System.err.println("   node: " + node);
                assertTrue("find result", node != null) ;       
                assertEquals("find result has children", 2, node.getChildren().size()) ;        
-               ProgramElementNode pNode = (ProgramElementNode)node;
-               assertTrue("found node: " + pNode.getName(), pNode.getProgramElementKind().equals(ProgramElementNode.Kind.FILE_JAVA));
+               IProgramElement pNode = (IProgramElement)node;
+               assertTrue("found node: " + pNode.getName(), pNode.getKind().equals(IProgramElement.Kind.FILE_JAVA));
        }
   
        /**
@@ -128,11 +124,11 @@ public class StructureModelTest extends AjdeTestCase {
         assertTrue("model exists", model != null);
                assertTrue("root exists", model.getRoot() != null);
                File testFile = openFile("figures-coverage/figures/Main.java");
-               StructureNode node = model.findNodeForSourceLine(testFile.getCanonicalPath(), 11);      
+               IProgramElement node = model.findNodeForSourceLine(testFile.getCanonicalPath(), 11);    
                        
                assertTrue("find result", node != null);        
                        
-               ProgramElementNode pNode = (ProgramElementNode)((ProgramElementNode)node).getParent();
+               IProgramElement pNode = (IProgramElement)((IProgramElement)node).getParent();
         if (null == pNode) {
             assertTrue("null parent of " + node, false);
         }
@@ -143,7 +139,7 @@ public class StructureModelTest extends AjdeTestCase {
         * Integrity could be checked somewhere in the API.
         */ 
        public void testModelIntegrity() {
-               StructureNode modelRoot = Ajde.getDefault().getStructureModelManager().getStructureModel().getRoot();
+               IProgramElement modelRoot = Ajde.getDefault().getStructureModelManager().getStructureModel().getRoot();
                assertTrue("root exists", modelRoot != null);   
                
                try {
@@ -153,9 +149,9 @@ public class StructureModelTest extends AjdeTestCase {
                }
        }
 
-       private void testModelIntegrityHelper(StructureNode node) throws Exception {
+       private void testModelIntegrityHelper(IProgramElement node) throws Exception {
                for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
-                       StructureNode child = (StructureNode)it.next();
+                       IProgramElement child = (IProgramElement)it.next();
                        if (node == child.getParent()) {
                                testModelIntegrityHelper(child);
                        } else {
@@ -165,8 +161,8 @@ public class StructureModelTest extends AjdeTestCase {
        }
   
        public void testNoChildIsNull() {
-               ModelWalker walker = new ModelWalker() {
-                   public void preProcess(StructureNode node) {
+               HierarchyWalker walker = new HierarchyWalker() {
+                   public void preProcess(IProgramElement node) {
                        if (node.getChildren() == null) return;
                        for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
                                if (it.next() == null) throw new NullPointerException("null child on node: " + node.getName()); 
index 8918527417689407bd044dac1298d45bcb861787..3f41e5e520fe4e91f65d0cca8a1b886d8f45dca3 100644 (file)
@@ -18,7 +18,7 @@ import java.util.*;
 import junit.framework.TestSuite;
 
 import org.aspectj.ajde.AjdeTestCase;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author Mik Kersten
@@ -47,7 +47,7 @@ public class StructureModelUtilTest extends AjdeTestCase {
         assertTrue("packages list not empty", !packages.isEmpty());
                // System.err.println("> packages: " + packages);
        
-               ProgramElementNode packageNode = (ProgramElementNode)((Object[])packages.get(0))[0];
+               IProgramElement packageNode = (IProgramElement)((Object[])packages.get(0))[0];
                assertTrue("package node not null", packageNode != null);
                // System.err.println("> package node: " + packageNode);
                
@@ -55,15 +55,17 @@ public class StructureModelUtilTest extends AjdeTestCase {
                assertTrue("fle list not null", files != null);
                // System.err.println("> file list: " + files);
                
-               Map lineAdviceMap = StructureModelUtil.getLinesToAspectMap(
-                       ((ProgramElementNode)files.get(0)).getSourceLocation().getSourceFile().getAbsolutePath()
-               );
-               assertTrue("line->advice map not null", lineAdviceMap != null);
-               // System.err.println("> line->advice map: " + lineAdviceMap);                  
-               
-               Set aspects = StructureModelUtil.getAspectsAffectingPackage(packageNode);
-               assertTrue("aspect list not null", aspects != null);
-               // System.err.println("> aspects affecting package: " + aspects);                       
+               // TODO: re-enable
+//             Map lineAdviceMap = StructureModelUtil.getLinesToAspectMap(
+//                     ((IProgramElement)files.get(0)).getSourceLocation().getSourceFile().getAbsolutePath()
+//             );
+//             
+//             assertTrue("line->advice map not null", lineAdviceMap != null);
+//             // System.err.println("> line->advice map: " + lineAdviceMap);                  
+//             
+//             Set aspects = StructureModelUtil.getAspectsAffectingPackage(packageNode);
+//             assertTrue("aspect list not null", aspects != null);
+//             // System.err.println("> aspects affecting package: " + aspects);                       
        }
 
   
index 418a4743b015986561ab0ad9ade736a765c3a6c4..a27630d55c53a3d0c6ec4547dc4f4567fe481e39 100644 (file)
@@ -19,7 +19,7 @@ import junit.framework.TestSuite;
 
 import org.aspectj.ajde.Ajde;
 import org.aspectj.ajde.AjdeTestCase;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 
 /**
  * @author Mik Kersten
@@ -54,7 +54,7 @@ public class StructureSearchManagerTest extends AjdeTestCase {
        public void testFindPatternAndKindMatch() {
                List matches = Ajde.getDefault().getStructureSearchManager().findMatches(
                        "Point",
-                       ProgramElementNode.Kind.CONSTRUCTOR
+                       IProgramElement.Kind.CONSTRUCTOR
                );
                System.err.println(matches);
                assertTrue("non existent node", true);
index 2e0e7da3957ce2bc4218df922986b3f11229e46e..1bd8776ea7e66f4220a572d451d7aeb4f7c85985 100644 (file)
@@ -20,8 +20,7 @@ import junit.framework.TestSuite;
 
 import org.aspectj.ajde.Ajde;
 import org.aspectj.ajde.AjdeTestCase;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.*;
 
 /**
  * @author Mik Kersten
@@ -63,6 +62,7 @@ public class StructureViewManagerTest extends AjdeTestCase {
                renderer.setHasBeenNotified(false);
                Ajde.getDefault().getConfigurationManager().setActiveConfigFile("MumbleDoesNotExist.lst");                      
                assertTrue("notified", renderer.getHasBeenNotified());          
+               
                assertTrue(
                        "no structure", 
                        currentView.getRootNode().getStructureNode().getChildren().get(0) 
@@ -82,20 +82,20 @@ public class StructureViewManagerTest extends AjdeTestCase {
                Ajde.getDefault().getStructureModelManager().readStructureModel(CONFIG_FILE_PATH);
                
                assertTrue("notified", renderer.getHasBeenNotified());  
-               //System.err.println(">>>>>> " + currentView.getRootNode().getStructureNode());
+               //System.err.println(">>>>>> " + currentView.getRootNode().getIProgramElement());
                // AMC should this be currentView, or should we recreate the root... do the latter      
-               //StructureNode n = currentView.getRootNode().getStructureNode();
-               StructureNode n = Ajde.getDefault().getStructureModelManager().getStructureModel().getRoot();
+               //IProgramElement n = currentView.getRootNode().getIProgramElement();
+               IProgramElement n = Ajde.getDefault().getStructureModelManager().getStructureModel().getRoot();
                assertTrue(
                        "no structure", 
-                       //currentView.getRootNode().getStructureNode().getChildren().get(0) 
+                       //currentView.getRootNode().getIProgramElement().getChildren().get(0) 
                        n == StructureModel.NO_STRUCTURE
                );      
        }
 
        public void testModelIntegrity() {
                doSynchronousBuild(CONFIG_FILE_PATH);
-               StructureNode modelRoot = Ajde.getDefault().getStructureModelManager().getStructureModel().getRoot();
+               IProgramElement modelRoot = Ajde.getDefault().getStructureModelManager().getStructureModel().getRoot();
                assertTrue("root exists", modelRoot != null);   
                
                try {
@@ -105,9 +105,9 @@ public class StructureViewManagerTest extends AjdeTestCase {
                }
        }
 
-       private void testModelIntegrityHelper(StructureNode node) throws Exception {
+       private void testModelIntegrityHelper(IProgramElement node) throws Exception {
                for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
-                       StructureNode child = (StructureNode)it.next();
+                       IProgramElement child = (IProgramElement)it.next();
                        if (node == child.getParent()) {
                                testModelIntegrityHelper(child);
                        } else {
diff --git a/asm/src/org/aspectj/asm/AdviceAssociation.java b/asm/src/org/aspectj/asm/AdviceAssociation.java
deleted file mode 100644 (file)
index 0ff1667..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Mik Kersten
- */
-public class AdviceAssociation implements Association {
-       
-    public static final String NAME = "Advice";
-    public static final Relation METHOD_RELATION = new Relation("advises methods", "method advised by", NAME, true, false);
-    public static final Relation METHOD_CALL_SITE_RELATION = new Relation("advises method call sites", "method call site advised by", NAME, true, false);
-    public static final Relation CONSTRUCTOR_RELATION = new Relation("advises constructors", "constructors advised by", NAME, true, false);
-    public static final Relation CONSTRUCTOR_CALL_SITE_RELATION = new Relation("advises constructions", "construction advised by", NAME, true, false);
-    public static final Relation HANDLER_RELATION = new Relation("advises exception handlers", "exception handler advised by", NAME, true, false);
-    public static final Relation INITIALIZER_RELATION = new Relation("advises initializers", "initializers advised by", NAME, true, false);
-    public static final Relation FIELD_ACCESS_RELATION = new Relation("advises field access", "field access advised by", NAME, true, false);
-    public static final Relation INTRODUCTION_RELATION = new Relation("advises introduction", "introduction advised by", NAME, true, false);
-
-    private List relations = new ArrayList();
-
-    public AdviceAssociation() {
-        relations.add(METHOD_RELATION);
-        relations.add(METHOD_CALL_SITE_RELATION);
-        relations.add(CONSTRUCTOR_RELATION);
-        relations.add(CONSTRUCTOR_CALL_SITE_RELATION);
-        relations.add(HANDLER_RELATION);
-        relations.add(INITIALIZER_RELATION);
-        relations.add(FIELD_ACCESS_RELATION);
-        relations.add(INTRODUCTION_RELATION);
-    }
-
-    public List getRelations() {
-        return relations;
-    }
-
-    public List getRelationNodes() {
-        List relations = new ArrayList();
-        List methods = new ArrayList();
-        List methodCallSites = new ArrayList();
-        List constructors = new ArrayList();
-        List constructorCallSites = new ArrayList();
-        List handlers = new ArrayList();
-        List initializers = new ArrayList();
-        List fieldAccesses = new ArrayList();
-        List introductions = new ArrayList();
-//        Set forwardCorrs = StructureModelManager.correspondences.getAffects(astObject);
-//        Set backCorrs = StructureModelManager.correspondences.getAffectedBy(astObject);
-//
-//        if (astObject instanceof AdviceDec) {
-//            for (Iterator it = forwardCorrs.iterator(); it.hasNext(); ) {
-//                ASTObject node = (ASTObject)it.next();
-//                LinkNode link = StructureNodeFactory.makeLink(node, false);
-//                if (node instanceof MethodDec) {
-//                    if (((MethodDec)node).isSynthetic()) {
-//                        ASTObject resolvedNode = resolveSyntheticMethodToIntroduction((MethodDec)node);
-//                        introductions.add(StructureNodeFactory.makeLink(resolvedNode, false));
-//                    } else {
-//                        methods.add(link);
-//                    }
-//                } else if (node instanceof CallExpr) {
-//                    methodCallSites.add(link);
-//                } else if (node instanceof ConstructorDec) {
-//                    constructors.add(link);
-//                } else if (node instanceof NewInstanceExpr) {
-//                    constructorCallSites.add(link);
-//                } else if (node instanceof CatchClause) {
-//                    handlers.add(link);
-//                } else if (node instanceof InitializerDec) {
-//                    initializers.add(link);
-//                } else if (node instanceof FieldDec) {
-//                    fieldAccesses.add(link);
-//                } else if (node instanceof BasicAssignExpr || node instanceof FieldAccessExpr) {
-//                     fieldAccesses.add(link);        
-//                } 
-//            }
-//            if (!methods.isEmpty()) relations.add(new RelationNode(METHOD_RELATION, METHOD_RELATION.getForwardNavigationName(), methods));
-//            if (!methodCallSites.isEmpty()) relations.add(new RelationNode(METHOD_RELATION, METHOD_CALL_SITE_RELATION.getForwardNavigationName(), methodCallSites));
-//            if (!constructors.isEmpty()) relations.add(new RelationNode(CONSTRUCTOR_RELATION, CONSTRUCTOR_RELATION.getForwardNavigationName(), constructors));
-//            if (!constructorCallSites.isEmpty()) relations.add(new RelationNode(CONSTRUCTOR_CALL_SITE_RELATION, CONSTRUCTOR_CALL_SITE_RELATION.getForwardNavigationName(), constructorCallSites));
-//            if (!handlers.isEmpty()) relations.add(new RelationNode(HANDLER_RELATION, HANDLER_RELATION.getForwardNavigationName(), handlers));
-//            if (!initializers.isEmpty()) relations.add(new RelationNode(INITIALIZER_RELATION, INITIALIZER_RELATION.getForwardNavigationName(), initializers));
-//            if (!fieldAccesses.isEmpty()) relations.add(new RelationNode(FIELD_ACCESS_RELATION, FIELD_ACCESS_RELATION.getForwardNavigationName(), fieldAccesses));
-//            if (!introductions.isEmpty()) relations.add(new RelationNode(INTRODUCTION_RELATION, INTRODUCTION_RELATION.getForwardNavigationName(), introductions));
-//        } else {
-//            if (astObject instanceof IntroducedDec) {
-//                Set adviceDecs = resolveAdviceAffectingIntroduction((IntroducedDec)astObject);
-//                if (adviceDecs != null) {
-//                    for (Iterator adIt = adviceDecs.iterator(); adIt.hasNext(); ) {
-//                        introductions.add(StructureNodeFactory.makeLink((ASTObject)adIt.next(), false));
-//                    }
-//                }
-//            }
-//
-//            for (Iterator it = backCorrs.iterator(); it.hasNext(); ) {
-//                ASTObject node = (ASTObject)it.next();
-//                if (node instanceof AdviceDec) {
-//                    if (astObject instanceof MethodDec) {
-//                        methods.add(StructureNodeFactory.makeLink(node, false));
-//                    } else if (astObject instanceof CallExpr) {
-//                        methodCallSites.add(StructureNodeFactory.makeLink(node, false));
-//                    } else if (astObject instanceof ConstructorDec) {
-//                        constructors.add(StructureNodeFactory.makeLink(node, false));
-//                    } else if (astObject instanceof NewInstanceExpr) {
-//                        constructorCallSites.add(StructureNodeFactory.makeLink(node, false));
-//                    } else if (astObject instanceof CatchClause) {
-//                        handlers.add(StructureNodeFactory.makeLink(node, false));
-//                    } else if (astObject instanceof InitializerDec) {
-//                        initializers.add(StructureNodeFactory.makeLink(node, false));
-//                    } else if (astObject instanceof FieldDec) {
-//                        fieldAccesses.add(StructureNodeFactory.makeLink(node, false));
-//                    } else if (astObject instanceof BasicAssignExpr 
-//                             || astObject instanceof FieldAccessExpr) {
-//                     fieldAccesses.add(StructureNodeFactory.makeLink(node, false));
-//                    }
-//                }
-//            }
-//            if (!methods.isEmpty()) relations.add(new RelationNode(METHOD_RELATION, METHOD_RELATION.getBackNavigationName(), methods));
-//            if (!methodCallSites.isEmpty()) relations.add(new RelationNode(METHOD_CALL_SITE_RELATION, METHOD_CALL_SITE_RELATION.getBackNavigationName(), methodCallSites));
-//            if (!constructors.isEmpty()) relations.add(new RelationNode(CONSTRUCTOR_RELATION, CONSTRUCTOR_RELATION.getBackNavigationName(), constructors));
-//            if (!constructorCallSites.isEmpty()) relations.add(new RelationNode(CONSTRUCTOR_CALL_SITE_RELATION, CONSTRUCTOR_CALL_SITE_RELATION.getBackNavigationName(), constructorCallSites));
-//            if (!handlers.isEmpty()) relations.add(new RelationNode(HANDLER_RELATION, HANDLER_RELATION.getBackNavigationName(), handlers));
-//            if (!initializers.isEmpty()) relations.add(new RelationNode(INITIALIZER_RELATION, INITIALIZER_RELATION.getBackNavigationName(), initializers));
-//            if (!fieldAccesses.isEmpty()) relations.add(new RelationNode(FIELD_ACCESS_RELATION, FIELD_ACCESS_RELATION.getBackNavigationName(), fieldAccesses));
-//            if (!introductions.isEmpty()) relations.add(new RelationNode(INTRODUCTION_RELATION, INTRODUCTION_RELATION.getBackNavigationName(), introductions));
-//        }
-        return relations;
-    }
-
-    public String getName() {
-        return NAME;
-    }
-
-//    /**
-//     * @todo    HACK: this search and hacked name-match should be replace by a fix to the correspondeces db
-//     */
-//    private ASTObject resolveSyntheticMethodToIntroduction(MethodDec node) {
-//        Set backCorrs = StructureModelManager.correspondences.getAffectedBy(node.getDeclaringType().getTypeDec());
-//        Method method = node.getMethod();
-//        String name = method.getDeclaringType().getName() + '.' + method.getName();
-//        for (Iterator it = backCorrs.iterator(); it.hasNext(); ) {
-//            Object next = it.next();
-//            if (next instanceof IntroducedDec) {
-//                IntroducedDec introducedDec = (IntroducedDec)next;
-//                if (name.equals(introducedDec.toShortString())) return introducedDec;
-//            }
-//        }
-//        return node;
-//    }
-
-//    /**
-//     * @todo    HACK: this search and hacked name-match should be replace by a fix to the correspondeces db
-//     */
-//    private Set resolveAdviceAffectingIntroduction(IntroducedDec node) {
-//        Set forwardCorrs = StructureModelManager.correspondences.getAffects(node);
-//        String name = node.getId();
-//        for (Iterator it = forwardCorrs.iterator(); it.hasNext(); ) {
-//            Object next = it.next();
-//            if (next instanceof TypeDec) {
-//                TypeDec typeDec = (TypeDec)next;
-//                List decs = typeDec.getBody().getList();
-//                for (Iterator it2 = decs.iterator(); it2.hasNext(); ) {
-//                    Dec bodyDec = (Dec)it2.next();
-//                    if (bodyDec != null && !(bodyDec instanceof InitializerDec)) {
-//                        if (bodyDec instanceof MethodDec && bodyDec.isSynthetic() && name.equals(bodyDec.getName())) {
-//                            MethodDec methodDec = (MethodDec)bodyDec;
-//                            return StructureModelManager.correspondences.getAffectedBy(methodDec);
-//                        }
-//                    }
-//                }
-//            }
-//        }
-//        return null;
-//    }
-}
-
diff --git a/asm/src/org/aspectj/asm/Association.java b/asm/src/org/aspectj/asm/Association.java
deleted file mode 100644 (file)
index c0431d6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.List;
-
-/**  
- * @author Mik Kersten
- */
-public interface Association {
-
-    public List getRelations();
-
-       // XXX used ASTObject parameter
-    public List getRelationNodes();
-
-    public String getName();
-}
diff --git a/asm/src/org/aspectj/asm/HierarchyWalker.java b/asm/src/org/aspectj/asm/HierarchyWalker.java
new file mode 100644 (file)
index 0000000..b1d9e61
--- /dev/null
@@ -0,0 +1,42 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation 
+ * ******************************************************************/
+
+
+package org.aspectj.asm;
+
+/**
+ * @author Mik Kersten
+ */
+public class HierarchyWalker {
+
+       private StructureModel model;
+
+       public HierarchyWalker() {
+               super();
+       }
+       
+       public HierarchyWalker(StructureModel model) {
+               this.model = model;
+    }
+
+    protected void preProcess(IProgramElement node) { }
+    
+    protected void postProcess(IProgramElement node) { }
+
+    public IProgramElement process(IProgramElement node) {
+               preProcess(node);
+        node.walk(this);
+        postProcess(node);
+        return node;
+    }
+}
diff --git a/asm/src/org/aspectj/asm/IProgramElement.java b/asm/src/org/aspectj/asm/IProgramElement.java
new file mode 100644 (file)
index 0000000..24132f5
--- /dev/null
@@ -0,0 +1,218 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ * ******************************************************************/
+
+package org.aspectj.asm;
+
+import java.io.*;
+import java.util.*;
+
+import org.aspectj.bridge.*;
+
+/**
+ * Represents program elements in the AspectJ containment hierarchy.
+ * 
+ * @author Mik Kersten
+ */
+public interface IProgramElement extends Serializable {
+       
+       public List/*IProgramElement*/ getChildren();
+       public void addChild(IProgramElement child);
+       public Kind getKind();
+       public List getModifiers();
+       public Accessibility getAccessibility();
+       public String getDeclaringType();
+       public String getPackageName();
+       public String getSignature();
+       public String getName();
+       public boolean isCode();
+       public boolean isMemberKind();
+       public void setRunnable(boolean value);
+       public boolean isRunnable();
+       public boolean isImplementor();
+       public void setImplementor(boolean value);
+       public boolean isOverrider();
+       public void setOverrider(boolean value);
+       public List getRelations();
+       public void setRelations(List relations);
+       public String getFormalComment();
+       public String toString();
+       public String getBytecodeName();
+       public String getBytecodeSignature();
+       public void setBytecodeName(String bytecodeName);
+       public void setBytecodeSignature(String bytecodeSignature);
+       public String getFullSignature();
+       public void setFullSignature(String string);
+       public void setKind(Kind kind);
+       public void setReturnType(String returnType);
+       public String getReturnType();
+       public ISourceLocation getSourceLocation();
+       public void setSourceLocation(ISourceLocation sourceLocation);
+       public IMessage getMessage();
+       public void setMessage(IMessage message);
+       public IProgramElement getParent();
+       public void setParent(IProgramElement parent);
+       public IProgramElement walk(HierarchyWalker walker);
+       public void setName(String name);
+       public void setChildren(List children);
+       
+       /**
+        * Uses "typesafe enum" pattern.
+        */
+       public static class Modifiers implements Serializable {
+               
+               public static final Modifiers STATIC = new Modifiers("static");
+               public static final Modifiers FINAL = new Modifiers("final");
+               public static final Modifiers ABSTRACT = new Modifiers("abstract");
+               public static final Modifiers SYNCHRONIZED = new Modifiers("synchronized");
+               public static final Modifiers VOLATILE = new Modifiers("volatile");
+               public static final Modifiers STRICTFP = new Modifiers("strictfp");
+               public static final Modifiers TRANSIENT = new Modifiers("transient");
+               public static final Modifiers NATIVE = new Modifiers("native");
+               public static final Modifiers[] ALL = { STATIC, FINAL, ABSTRACT, SYNCHRONIZED, TRANSIENT, VOLATILE, STRICTFP, NATIVE };
+               private final String name;
+               
+               private Modifiers(String name) {
+                       this.name = name;
+               }
+               
+               public String toString() {
+                       return name;
+               }       
+
+               // The 4 declarations below are necessary for serialization
+               private static int nextOrdinal = 0;
+               private final int ordinal = nextOrdinal++;
+               private Object readResolve() throws ObjectStreamException {
+                       return ALL[ordinal];
+               }
+       }
+
+       /**
+        * Uses "typesafe enum" pattern.
+        */
+       public static class Accessibility implements Serializable {
+               
+               public static final Accessibility PUBLIC = new Accessibility("public");
+               public static final Accessibility PACKAGE = new Accessibility("package");
+               public static final Accessibility PROTECTED = new Accessibility("protected");
+               public static final Accessibility PRIVATE = new Accessibility("private");
+               public static final Accessibility PRIVILEGED = new Accessibility("privileged");
+               public static final Accessibility[] ALL = { PUBLIC, PACKAGE, PROTECTED, PRIVATE, PRIVILEGED };
+               private final String name;
+               
+               private Accessibility(String name) {
+                       this.name = name;
+               }
+               
+               public String toString() {
+                       return name;
+               }       
+               
+               // The 4 declarations below are necessary for serialization
+               private static int nextOrdinal = 0;
+               private final int ordinal = nextOrdinal++;
+               private Object readResolve() throws ObjectStreamException {
+                       return ALL[ordinal];
+               }
+       }
+
+       /**
+        * Uses "typesafe enum" pattern.
+        */
+       public static class Kind implements Serializable {
+               
+               public static final Kind PROJECT = new Kind("project");
+               public static final Kind PACKAGE = new Kind("package");
+               public static final Kind FILE = new Kind("file");
+               public static final Kind FILE_JAVA = new Kind("java source file");
+               public static final Kind FILE_ASPECTJ = new Kind("aspect source file");
+               public static final Kind FILE_LST = new Kind("build configuration file");
+               public static final Kind CLASS = new Kind("class");
+               public static final Kind INTERFACE = new Kind("interface");
+               public static final Kind ASPECT = new Kind("aspect");
+               public static final Kind INITIALIZER = new Kind("initializer");
+               public static final Kind INTER_TYPE_FIELD = new Kind("inter-type field");
+               public static final Kind INTER_TYPE_METHOD = new Kind("inter-type method");
+               public static final Kind INTER_TYPE_CONSTRUCTOR = new Kind("inter-type constructor");
+               public static final Kind CONSTRUCTOR = new Kind("constructor");
+               public static final Kind METHOD = new Kind("method");
+               public static final Kind FIELD = new Kind("field");  
+               public static final Kind POINTCUT = new Kind("pointcut");
+               public static final Kind ADVICE = new Kind("advice");
+               public static final Kind DECLARE_PARENTS = new Kind("declare parents");
+               public static final Kind DECLARE_WARNING = new Kind("declare warning");
+               public static final Kind DECLARE_ERROR = new Kind("declare error");
+               public static final Kind DECLARE_SOFT = new Kind("declare soft");
+               public static final Kind DECLARE_PRECEDENCE= new Kind("declare precedence");
+               public static final Kind CODE = new Kind("decBodyElement");
+               public static final Kind ERROR = new Kind("error");
+
+               public static final Kind[] ALL = { PROJECT, PACKAGE, FILE, FILE_JAVA, 
+                       FILE_ASPECTJ, FILE_LST, CLASS, INTERFACE, ASPECT,
+                       INITIALIZER, INTER_TYPE_FIELD, INTER_TYPE_METHOD, INTER_TYPE_CONSTRUCTOR, 
+                       CONSTRUCTOR, METHOD, FIELD, POINTCUT, ADVICE, DECLARE_PARENTS, 
+                       DECLARE_WARNING, DECLARE_ERROR, DECLARE_SOFT, CODE, ERROR };
+               
+               public static Kind getKindForString(String kindString) {
+                       for (int i = 0; i < ALL.length; i++) {
+                               if (ALL[i].toString().equals(kindString)) return ALL[i];        
+                       }
+                       return ERROR;
+               }
+               
+               private final String name;
+               
+               private Kind(String name) {
+                       this.name = name;
+               }
+               
+               public String toString() {
+                       return name;
+               }       
+               
+               public static List getNonAJMemberKinds() {
+                       List list = new ArrayList();
+                       list.add(METHOD);
+                       list.add(FIELD);
+                       list.add(CONSTRUCTOR);
+                       return list;
+               }
+               
+               public boolean isMemberKind() {
+                       return this == FIELD
+                               || this == METHOD
+                               || this == CONSTRUCTOR
+                               || this == POINTCUT
+                               || this == ADVICE;
+               }
+               
+               public boolean isTypeKind() {
+                       return this == CLASS
+                               || this == INTERFACE
+                               || this == ASPECT;      
+               }
+
+               public boolean isSourceFileKind() {
+                       return this == FILE_ASPECTJ
+                               || this == FILE_JAVA;
+               }
+               
+               public boolean isDeclareKind() {
+                       return name.startsWith("declare");      
+               } 
+
+               // The 4 declarations below are necessary for serialization
+               private static int nextOrdinal = 0;
+               private final int ordinal = nextOrdinal++;
+               private Object readResolve() throws ObjectStreamException {
+                       return ALL[ordinal];
+               }
+       }
+}
\ No newline at end of file
diff --git a/asm/src/org/aspectj/asm/IRelationship.java b/asm/src/org/aspectj/asm/IRelationship.java
new file mode 100644 (file)
index 0000000..ab8d9bf
--- /dev/null
@@ -0,0 +1,60 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation 
+ * ******************************************************************/
+
+
+package org.aspectj.asm;
+
+import java.io.*;
+import java.util.List;
+
+/**
+ * @author Mik Kersten
+ */
+public interface IRelationship extends Serializable {
+
+       public String getName();
+       
+       public Kind getKind();
+       
+       public IProgramElement getSource();
+       
+       public List/*IProgramElement*/ getTargets();
+       
+       /**
+        * Uses "typesafe enum" pattern.
+        */
+       public static class Kind implements Serializable {
+               
+               public static final Kind ADVICE = new Kind("static");
+               public static final Kind INHERITANCE = new Kind("final");
+               public static final Kind REFERENCE = new Kind("abstract");
+               public static final Kind DECLARE = new Kind("volatile");
+               public static final Kind[] ALL = { ADVICE, INHERITANCE, REFERENCE, DECLARE };
+               private final String name;
+               
+               private Kind(String name) {
+                       this.name = name;
+               }
+               
+               public String toString() {
+                       return name;
+               }       
+
+               // The 4 declarations below are necessary for serialization
+               private static int nextOrdinal = 0;
+               private final int ordinal = nextOrdinal++;
+               private Object readResolve() throws ObjectStreamException {
+                       return ALL[ordinal];
+               }
+       }
+}
diff --git a/asm/src/org/aspectj/asm/IStructureModelListener.java b/asm/src/org/aspectj/asm/IStructureModelListener.java
new file mode 100644 (file)
index 0000000..9512045
--- /dev/null
@@ -0,0 +1,27 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation 
+ * ******************************************************************/
+
+
+package org.aspectj.asm;
+
+import java.util.EventListener;
+
+/**
+ * Compiler listeners get notified of structure model update events.
+ *
+ * @author Mik Kersten
+ */
+public interface IStructureModelListener extends EventListener {
+
+    public void modelUpdated(StructureModel rootNode);
+}
diff --git a/asm/src/org/aspectj/asm/InheritanceAssociation.java b/asm/src/org/aspectj/asm/InheritanceAssociation.java
deleted file mode 100644 (file)
index dea4bd6..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Mik Kersten
- */
-public class InheritanceAssociation implements Association {
-    public static final String NAME = "Inheritance";
-    public static final Relation INHERITS_RELATION = new Relation("inherits", "is inherited by", NAME, true, true);
-    public static final Relation IMPLEMENTS_RELATION = new Relation("implements", "is implemented by", NAME, true, true);
-    public static final Relation INHERITS_MEMBERS_RELATION = new Relation("inherits members", NAME, false);
-    private List relations = new ArrayList();
-
-    public InheritanceAssociation() {
-        relations.add(INHERITS_RELATION);
-        relations.add(IMPLEMENTS_RELATION);
-        relations.add(INHERITS_MEMBERS_RELATION);
-    }
-
-    public List getRelations() {
-        return relations;
-    }
-
-    public List getRelationNodes() {
-        List relations = new ArrayList();
-//        if (astObject instanceof TypeDec) {
-//            TypeDec typeDec = (TypeDec)astObject;
-//            boolean isInterface = (astObject instanceof InterfaceDec);
-//            List superTypes = getTypeLinks(typeDec.getType().getDirectSuperTypes(), true, isInterface);
-//            List subTypes = getTypeLinks(typeDec.getType().getDirectSubTypes(), true, isInterface);
-//            if (!superTypes.isEmpty()) relations.add(new RelationNode(INHERITS_RELATION, INHERITS_RELATION.getForwardNavigationName(), superTypes));
-//            if (!subTypes.isEmpty()) relations.add(new RelationNode(INHERITS_RELATION, INHERITS_RELATION.getBackNavigationName(), subTypes));
-//
-//            List implementedInterfaces = getTypeLinks(typeDec.getType().getDirectSuperTypes(), false, isInterface);
-//            List implementors = getTypeLinks(typeDec.getType().getDirectSubTypes(), false, isInterface);
-//            if (!implementedInterfaces.isEmpty()) relations.add(new RelationNode(IMPLEMENTS_RELATION, IMPLEMENTS_RELATION.getForwardNavigationName(), implementedInterfaces));
-//            if (!implementors.isEmpty()) relations.add(new RelationNode(IMPLEMENTS_RELATION, IMPLEMENTS_RELATION.getBackNavigationName(), implementors));
-//
-//            List inheritedMembers = new ArrayList(getMemberLinks(typeDec.getType().getInheritedMethods()));
-//            if (!inheritedMembers.isEmpty()) relations.add(new RelationNode(INHERITS_MEMBERS_RELATION, INHERITS_MEMBERS_RELATION.getForwardNavigationName(), inheritedMembers));
-//        }
-        return relations;
-    }
-
-//    private List getTypeLinks(Collection types, boolean isInheritance, boolean isInterface) {
-//        List links = new ArrayList();
-//        if (types != null) {
-//            for (Iterator it = types.iterator(); it.hasNext(); ) {
-//                NameType nameType = (NameType)it.next();
-//                if (!nameType.getId().equals("Object")) {
-//                    if (isInheritance && ((isInterface && nameType.isInterface()) || (!isInterface && !nameType.isInterface()))
-//                        || !isInheritance && (!isInterface && nameType.isInterface())) {
-//                        Dec dec = nameType.getCorrespondingDec();
-//                        links.add(StructureNodeFactory.makeLink(dec, false));
-//                    }
-//                }
-//            }
-//        }
-//        return links;
-//    }
-
-//    private List getMemberLinks(Collection members) {
-//        List links = new ArrayList();
-//        if (members != null) {
-//            for (Iterator it = members.iterator(); it.hasNext(); ) {
-//                Object object = it.next();
-//                if (object instanceof Method) {
-//                    Method method = (Method)object;
-//                    if (!method.getDeclaringType().getId().equals("Object")) {
-//                        links.add(StructureNodeFactory.makeLink(method.getCorrespondingDec(), false));
-//                    }
-//                } else if (object instanceof Field) {
-//                    Field field = (Field)object;
-//                    if (!field.getDeclaringType().getId().equals("Object")) {
-//                        links.add(StructureNodeFactory.makeLink(field.getCorrespondingDec(), false));
-//                    }
-//                }
-//            }
-//        }
-//        return links;
-//    }
-
-    public String getName() {
-        return NAME;
-    }
-}
diff --git a/asm/src/org/aspectj/asm/IntroductionAssociation.java b/asm/src/org/aspectj/asm/IntroductionAssociation.java
deleted file mode 100644 (file)
index 867baa6..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Mik Kersten
- */
-public class IntroductionAssociation implements Association {
-    public static final String NAME = "Introduction";
-    public static final Relation INTRODUCES_RELATION = new Relation("declares member on", "inter-type declared members", NAME, true, false);
-    private List relations = new ArrayList();
-
-    public IntroductionAssociation() {
-        relations.add(INTRODUCES_RELATION);
-    }
-
-    public List getRelations() {
-        return relations;
-    }
-
-    public List getRelationNodes() {
-        List relations = new ArrayList();
-        List introduces = new ArrayList();
-//        Set forwardCorrs = StructureModelManager.correspondences.getAffects(astObject);
-//        Set backCorrs = StructureModelManager.correspondences.getAffectedBy(astObject);
-//        if (astObject instanceof IntroducedDec) {
-//            for (Iterator it = forwardCorrs.iterator(); it.hasNext(); ) {
-//                ASTObject node = (ASTObject)it.next();
-//                LinkNode link = StructureNodeFactory.makeLink(node, false);
-//                if (node instanceof TypeDec) {
-//                    introduces.add(link);
-//                }
-//            }
-//            if (!introduces.isEmpty()) relations.add(new RelationNode(INTRODUCES_RELATION, INTRODUCES_RELATION.getForwardNavigationName(), introduces));
-//        } else {
-//            for (Iterator it = backCorrs.iterator(); it.hasNext(); ) {
-//                ASTObject node = (ASTObject)it.next();
-//                if (astObject instanceof TypeDec) {
-//                    if (node instanceof IntroducedDec) {
-//                        introduces.add(StructureNodeFactory.makeLink(node, false));
-//                    }
-//                }
-//            }
-//            if (!introduces.isEmpty()) relations.add(new RelationNode(INTRODUCES_RELATION, INTRODUCES_RELATION.getBackNavigationName(), introduces));
-//        }
-        return relations;
-    }
-
-    public String getName() {
-        return NAME;
-    }
-}
diff --git a/asm/src/org/aspectj/asm/LinkNode.java b/asm/src/org/aspectj/asm/LinkNode.java
deleted file mode 100644 (file)
index 9db0dd2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-
-/**
- * @author Mik Kersten
- */
-public class LinkNode extends StructureNode {
-    
-    private ProgramElementNode programElementNode = null;
-
-    /**
-     * Used during de-serialization.
-     */
-    public LinkNode() { }
-
-       /**
-        * @param       node    can not be null
-        */
-    public LinkNode(ProgramElementNode node) {
-        super(node.getSignature().toString(), "internal", null);
-        this.programElementNode = node;
-    }
-
-    public ProgramElementNode getProgramElementNode() {
-        return programElementNode;
-    }
-
-    public String toString() {
-        String name = "";
-        if (programElementNode.getProgramElementKind().equals(ProgramElementNode.Kind.ADVICE) ||
-            programElementNode.getProgramElementKind().equals(ProgramElementNode.Kind.INTER_TYPE_FIELD) ||
-                       programElementNode.getProgramElementKind().equals(ProgramElementNode.Kind.INTER_TYPE_METHOD) ||
-                       programElementNode.getProgramElementKind().equals(ProgramElementNode.Kind.INTER_TYPE_CONSTRUCTOR) ||
-            programElementNode.getProgramElementKind().equals(ProgramElementNode.Kind.CODE)) {
-            name = programElementNode.parent.toString() + ": " + programElementNode.getName();
-                       StructureNode grandparent = programElementNode.parent.parent;
-            if ( grandparent instanceof ProgramElementNode ) {
-               ProgramElementNode pe_grandparent = (ProgramElementNode)grandparent;
-               if ( pe_grandparent.getProgramElementKind().equals(ProgramElementNode.Kind.CLASS) ||
-                                        pe_grandparent.getProgramElementKind().equals(ProgramElementNode.Kind.INTERFACE)
-                   ) {
-                       name = pe_grandparent.toString() + "." + name;  
-               }
-            }
-            
-        } else if (programElementNode.isMemberKind()) {
-            name = programElementNode.parent.toString() + '.' + programElementNode.getName(); 
-        } else {
-            name = programElementNode.toString();
-        }
-        return name;
-    }
-}
diff --git a/asm/src/org/aspectj/asm/ModelWalker.java b/asm/src/org/aspectj/asm/ModelWalker.java
deleted file mode 100644 (file)
index e5e19de..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-/**
- * @author Mik Kersten
- */
-public class ModelWalker {
-
-       private StructureModel model;
-
-       public ModelWalker() {
-               super();
-       }
-       
-       public ModelWalker(StructureModel model) {
-               this.model = model;
-    }
-
-    protected void preProcess(StructureNode node) { }
-    
-    protected void postProcess(StructureNode node) { }
-
-    public StructureNode process(StructureNode node) {
-               preProcess(node);
-        node.walk(this);
-        postProcess(node);
-        return node;
-    }
-}
diff --git a/asm/src/org/aspectj/asm/ProgramElementNode.java b/asm/src/org/aspectj/asm/ProgramElementNode.java
deleted file mode 100644 (file)
index 37861a4..0000000
+++ /dev/null
@@ -1,413 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.*;
-import java.io.*;
-
-import org.aspectj.bridge.ISourceLocation;
-
-
-/**
- * @author Mik Kersten
- */
-public class ProgramElementNode extends StructureNode {
-               
-       private List modifiers = new ArrayList();
-    private List relations = new ArrayList();
-
-       private Kind kind;
-       private Accessibility accessibility;
-    private String declaringType = "";
-    private String formalComment = "";
-    private String packageName = null;
-    private boolean runnable = false;
-    private boolean implementor = false; 
-    private boolean overrider = false;
-    
-    private String bytecodeName;
-    private String bytecodeSignature;
-    private String fullSignature;
-       private String returnType;
-    
-    /**
-     * Used during de-externalization.
-     */
-    public ProgramElementNode() { }
-
-       /**
-        * Use to create program element nodes that do not correspond to source locations.
-        */
-       public ProgramElementNode(
-               String signature, 
-               Kind kind, 
-               List children) {
-               super(signature, kind.toString(), children);
-               this.kind = kind;
-       }
-       
-       public ProgramElementNode(
-               String signature,
-               ProgramElementNode.Kind kind,
-               ISourceLocation sourceLocation,
-               int modifiers,
-               String formalComment,
-               List children)
-       {
-        super(signature, kind.toString(), children);
-        super.sourceLocation = sourceLocation;
-        this.kind = kind;
-        this.formalComment = formalComment;
-        this.modifiers = genModifiers(modifiers);
-        this.accessibility = genAccessibility(modifiers);
-    }
-       
-       /**
-        * Use to create program element nodes that correspond to source locations.
-        */
-    public ProgramElementNode(
-       String signature, 
-       Kind kind, 
-       List modifiers, 
-       Accessibility accessibility,
-        String declaringType, 
-        String packageName, 
-        String formalComment, 
-        ISourceLocation sourceLocation,
-        List relations, 
-        List children, 
-        boolean member) {
-
-        super(signature, kind.toString(), children);
-        super.sourceLocation = sourceLocation;
-        this.kind = kind;
-        this.modifiers = modifiers;
-        this.accessibility = accessibility;
-        this.declaringType = declaringType;
-        this.packageName = packageName;
-        this.formalComment = formalComment;
-        this.relations = relations;
-    }
-
-       public Kind getProgramElementKind() {
-               return kind;    
-       }
-
-    public List getModifiers() {
-        return modifiers;
-    }
-
-    public Accessibility getAccessibility() {
-        return accessibility;
-    }
-
-    public String getDeclaringType() {
-        return declaringType;
-    }
-
-    public String getPackageName() {
-       if (kind == Kind.PACKAGE) return getSignature();
-       if (getParent() == null || !(getParent() instanceof ProgramElementNode)) {
-               return "";
-       }
-       return ((ProgramElementNode)getParent()).getPackageName();
-    }
-
-    public String getKind() {
-        return super.kind;
-    }
-
-    public String getSignature() {
-        return super.name;
-    }
-
-    public boolean isCode() {
-        return kind.equals(Kind.CODE);
-    }
-
-    public boolean isMemberKind() {
-        return kind.isMemberKind();
-    }
-
-       public void setRunnable(boolean value) {
-               this.runnable = value;  
-       }
-
-       public boolean isRunnable() {
-               return runnable;        
-       }
-
-       public boolean isImplementor() {
-               return implementor;     
-       }
-
-       public void setImplementor(boolean value) {
-               this.implementor = value;       
-       }
-       
-       public boolean isOverrider() {
-               return overrider;               
-       }
-
-       public void setOverrider(boolean value) {
-               this.overrider = value; 
-       }
-
-    public List getRelations() {
-        return relations;
-    }
-
-    public void setRelations(List relations) {
-        if (relations.size() > 0) {
-            this.relations = relations;
-        }
-    }
-
-    public String getFormalComment() {
-        return formalComment;
-    }
-
-    public String toString() {
-        return super.name;
-    }
-
-       public static List genModifiers(int modifiers) {
-               List modifiersList = new ArrayList();
-               if ((modifiers & AccStatic) != 0) modifiersList.add(ProgramElementNode.Modifiers.STATIC);
-               if ((modifiers & AccFinal) != 0) modifiersList.add(ProgramElementNode.Modifiers.STATIC);
-               if ((modifiers & AccSynchronized) != 0) modifiersList.add(ProgramElementNode.Modifiers.STATIC);
-               if ((modifiers & AccVolatile) != 0) modifiersList.add(ProgramElementNode.Modifiers.STATIC);
-               if ((modifiers & AccTransient) != 0) modifiersList.add(ProgramElementNode.Modifiers.STATIC);
-               if ((modifiers & AccNative) != 0) modifiersList.add(ProgramElementNode.Modifiers.STATIC);
-               if ((modifiers & AccAbstract) != 0) modifiersList.add(ProgramElementNode.Modifiers.STATIC);
-               return modifiersList;           
-       }
-
-       public static ProgramElementNode.Accessibility genAccessibility(int modifiers) {
-               if ((modifiers & AccPublic) != 0) return ProgramElementNode.Accessibility.PUBLIC;
-               if ((modifiers & AccPrivate) != 0) return ProgramElementNode.Accessibility.PRIVATE;
-               if ((modifiers & AccProtected) != 0) return ProgramElementNode.Accessibility.PROTECTED;
-               if ((modifiers & AccPrivileged) != 0) return ProgramElementNode.Accessibility.PRIVILEGED;
-               else return ProgramElementNode.Accessibility.PACKAGE;
-       }
-
-    /**
-        * Uses "typesafe enum" pattern.
-        */
-       public static class Modifiers implements Serializable {
-               
-               public static final Modifiers STATIC = new Modifiers("static");
-               public static final Modifiers FINAL = new Modifiers("final");
-               public static final Modifiers ABSTRACT = new Modifiers("abstract");
-               public static final Modifiers SYNCHRONIZED = new Modifiers("synchronized");
-               public static final Modifiers VOLATILE = new Modifiers("volatile");
-               public static final Modifiers STRICTFP = new Modifiers("strictfp");
-               public static final Modifiers TRANSIENT = new Modifiers("transient");
-               public static final Modifiers NATIVE = new Modifiers("native");
-               public static final Modifiers[] ALL = { STATIC, FINAL, ABSTRACT, SYNCHRONIZED, TRANSIENT, VOLATILE, STRICTFP, NATIVE };
-               private final String name;
-               
-               private Modifiers(String name) {
-                       this.name = name;
-               }
-               
-               public String toString() {
-                       return name;
-               }       
-
-               // The 4 declarations below are necessary for serialization
-               private static int nextOrdinal = 0;
-               private final int ordinal = nextOrdinal++;
-               private Object readResolve() throws ObjectStreamException {
-                       return ALL[ordinal];
-               }
-       }
-
-       /**
-        * Uses "typesafe enum" pattern.
-        */
-       public static class Accessibility implements Serializable {
-               
-               public static final Accessibility PUBLIC = new Accessibility("public");
-               public static final Accessibility PACKAGE = new Accessibility("package");
-               public static final Accessibility PROTECTED = new Accessibility("protected");
-               public static final Accessibility PRIVATE = new Accessibility("private");
-               public static final Accessibility PRIVILEGED = new Accessibility("privileged");
-               public static final Accessibility[] ALL = { PUBLIC, PACKAGE, PROTECTED, PRIVATE, PRIVILEGED };
-               private final String name;
-               
-               private Accessibility(String name) {
-                       this.name = name;
-               }
-               
-               public String toString() {
-                       return name;
-               }       
-               
-               // The 4 declarations below are necessary for serialization
-               private static int nextOrdinal = 0;
-               private final int ordinal = nextOrdinal++;
-               private Object readResolve() throws ObjectStreamException {
-                       return ALL[ordinal];
-               }
-       }
-
-       /**
-        * Uses "typesafe enum" pattern.
-        */
-       public static class Kind implements Serializable {
-               
-               public static final Kind PROJECT = new Kind("project");
-               public static final Kind PACKAGE = new Kind("package");
-               public static final Kind FILE = new Kind("file");
-               public static final Kind FILE_JAVA = new Kind("java source file");
-               public static final Kind FILE_ASPECTJ = new Kind("aspect source file");
-               public static final Kind FILE_LST = new Kind("build configuration file");
-               public static final Kind CLASS = new Kind("class");
-               public static final Kind INTERFACE = new Kind("interface");
-               public static final Kind ASPECT = new Kind("aspect");
-               public static final Kind INITIALIZER = new Kind("initializer");
-               public static final Kind INTER_TYPE_FIELD = new Kind("inter-type field");
-               public static final Kind INTER_TYPE_METHOD = new Kind("inter-type method");
-               public static final Kind INTER_TYPE_CONSTRUCTOR = new Kind("inter-type constructor");
-               public static final Kind CONSTRUCTOR = new Kind("constructor");
-               public static final Kind METHOD = new Kind("method");
-               public static final Kind FIELD = new Kind("field");  
-               public static final Kind POINTCUT = new Kind("pointcut");
-               public static final Kind ADVICE = new Kind("advice");
-               public static final Kind DECLARE_PARENTS = new Kind("declare parents");
-               public static final Kind DECLARE_WARNING = new Kind("declare warning");
-               public static final Kind DECLARE_ERROR = new Kind("declare error");
-               public static final Kind DECLARE_SOFT = new Kind("declare soft");
-               public static final Kind DECLARE_PRECEDENCE= new Kind("declare precedence");
-               public static final Kind CODE = new Kind("decBodyElement");
-               public static final Kind ERROR = new Kind("error");
-
-               public static final Kind[] ALL = { PROJECT, PACKAGE, FILE, FILE_JAVA, 
-                       FILE_ASPECTJ, FILE_LST, CLASS, INTERFACE, ASPECT,
-                       INITIALIZER, INTER_TYPE_FIELD, INTER_TYPE_METHOD, INTER_TYPE_CONSTRUCTOR, 
-                       CONSTRUCTOR, METHOD, FIELD, POINTCUT, ADVICE, DECLARE_PARENTS, 
-                       DECLARE_WARNING, DECLARE_ERROR, DECLARE_SOFT, CODE, ERROR };
-               
-               public static Kind getKindForString(String kindString) {
-                       for (int i = 0; i < ALL.length; i++) {
-                               if (ALL[i].toString().equals(kindString)) return ALL[i];        
-                       }
-                       return ERROR;
-               }
-               
-               private final String name;
-               
-               private Kind(String name) {
-                       this.name = name;
-               }
-               
-               public String toString() {
-                       return name;
-               }       
-               
-               public static List getNonAJMemberKinds() {
-                       List list = new ArrayList();
-                       list.add(METHOD);
-                       list.add(FIELD);
-                       list.add(CONSTRUCTOR);
-                       return list;
-               }
-               
-               public boolean isMemberKind() {
-                       return this == FIELD
-                               || this == METHOD
-                               || this == CONSTRUCTOR
-                               || this == POINTCUT
-                               || this == ADVICE;
-               }
-               
-               public boolean isTypeKind() {
-                       return this == CLASS
-                               || this == INTERFACE
-                               || this == ASPECT;      
-               }
-
-               public boolean isSourceFileKind() {
-                       return this == FILE_ASPECTJ
-                               || this == FILE_JAVA;
-               }
-               
-               public boolean isDeclareKind() {
-                       return name.startsWith("declare");      
-               } 
-
-               // The 4 declarations below are necessary for serialization
-               private static int nextOrdinal = 0;
-               private final int ordinal = nextOrdinal++;
-               private Object readResolve() throws ObjectStreamException {
-                       return ALL[ordinal];
-               }
-       }
-       
-       // XXX these names and values are from org.eclipse.jdt.internal.compiler.env.IConstants
-       private static int AccPublic = 0x0001;
-       private static int AccPrivate = 0x0002;
-       private static int AccProtected = 0x0004;
-       private static int AccPrivileged = 0x0006;  // XXX is this right?
-       private static int AccStatic = 0x0008;
-       private static int AccFinal = 0x0010;
-       private static int AccSynchronized = 0x0020;
-       private static int AccVolatile = 0x0040;
-       private static int AccTransient = 0x0080;
-       private static int AccNative = 0x0100;
-       private static int AccInterface = 0x0200;
-       private static int AccAbstract = 0x0400;
-       private static int AccStrictfp = 0x0800;
-       
-       
-       public String getBytecodeName() {
-               return bytecodeName;
-       }
-
-       public String getBytecodeSignature() {
-               return bytecodeSignature;
-       }
-
-       public void setBytecodeName(String bytecodeName) {
-               this.bytecodeName = bytecodeName;
-       }
-
-       public void setBytecodeSignature(String bytecodeSignature) {
-               this.bytecodeSignature = bytecodeSignature;
-       }
-
-       public String getFullSignature() {
-               return fullSignature;
-       }
-
-       public void setFullSignature(String string) {
-               fullSignature = string;
-       }
-       
-       public void setKind(Kind kind) {
-               this.kind = kind;
-       }
-
-       public void setReturnType(String returnType) {
-               this.returnType = returnType;
-       }
-
-       public String getReturnType() {
-               return returnType;
-       }
-
-}
-
diff --git a/asm/src/org/aspectj/asm/ReferenceAssociation.java b/asm/src/org/aspectj/asm/ReferenceAssociation.java
deleted file mode 100644 (file)
index abe53ac..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Mik Kersten
- */
-public class ReferenceAssociation implements Association {
-    public static final String NAME = "Reference";
-    public static final Relation USES_POINTCUT_RELATION = new Relation("uses pointcut", "pointcut used by", NAME, true, true);
-    public static final Relation IMPORTS_RELATION = new Relation("imports", NAME, false);
-    //public static final Relation THROWS_RELATION = new Relation("throws", NAME, false);
-    //public static final Relation USES_TYPE_RELATION = new Relation("uses type", NAME, false);
-
-    private List relations = new ArrayList();
-
-    public ReferenceAssociation() {
-        relations.add(USES_POINTCUT_RELATION);
-        relations.add(IMPORTS_RELATION);
-        //relations.add(THROWS_RELATION);
-        //relations.add(USES_TYPE_RELATION);
-    }
-
-    public List getRelations() {
-        return relations;
-    }
-
-    public List getRelationNodes() {
-        List relations = new ArrayList();
-        List pointcutsUsed = new ArrayList();
-        List pointcutUsedBy = new ArrayList();
-        List throwsTypes = new ArrayList();
-        List imports = new ArrayList();
-        List usesType = new ArrayList();
-//        Set forwardCorrs = StructureModelManager.correspondences.getAffects(astObject);
-//        Set backCorrs = StructureModelManager.correspondences.getAffectedBy(astObject);
-//
-//        if (astObject instanceof AdviceDec) {
-//            for (Iterator it = forwardCorrs.iterator(); it.hasNext(); ) {
-//                ASTObject node = (ASTObject)it.next();
-//                if (node instanceof PointcutDec) {
-//                    pointcutsUsed.add(StructureNodeFactory.makeLink(node, false));
-//                }
-//            }
-//        } else if (astObject instanceof PointcutDec) {
-//            for (Iterator it = backCorrs.iterator(); it.hasNext(); ) {
-//                ASTObject node = (ASTObject)it.next();
-//                if (node instanceof PointcutDec || node instanceof AdviceDec) {
-//                    pointcutUsedBy.add(StructureNodeFactory.makeLink(node, false));
-//                }
-//            }
-//            for (Iterator it = forwardCorrs.iterator(); it.hasNext(); ) {
-//                ASTObject node = (ASTObject)it.next();
-//                if (node instanceof PointcutDec) {
-//                    pointcutsUsed.add(StructureNodeFactory.makeLink(node, false));
-//                }
-//            }
-//        } else if (astObject instanceof MethodDec) {
-//            Method method = ((MethodDec)astObject).getMethod();
-//            TypeDs throwsDs = method.getThrows();
-//            if (throwsDs != null) {
-//                for (Iterator it = throwsDs.iterator(); it.hasNext(); ) {
-//                    Object o = it.next();
-//                    if (o instanceof ResolvedTypeD) {
-//                        ResolvedTypeD resolved = (ResolvedTypeD)o;
-//                        if (resolved.getType().getCorrespondingDec() != null) {
-//                            throwsTypes.add(StructureNodeFactory.makeLink(resolved.getType().getCorrespondingDec(), false));
-//                        }
-//                    }
-//                }
-//            }
-//            if (!(method.getReturnType() instanceof PrimitiveType) && method.getReturnType().getCorrespondingDec() != null) {
-//                    usesType.add(StructureNodeFactory.makeLink(method.getReturnType().getCorrespondingDec(), false));
-//            }
-//        } else if (astObject instanceof FieldDec) {
-//            Field field = ((FieldDec)astObject).getField();
-//            if (!(field.getFieldType() instanceof PrimitiveType) && field.getFieldType().getCorrespondingDec() != null) {
-//                usesType.add(StructureNodeFactory.makeLink(field.getFieldType().getCorrespondingDec(), false));
-//            }
-//        }
-//        else if (astObject instanceof CompilationUnit) {
-//            CompilationUnit cu = (CompilationUnit)astObject;
-//            org.aspectj.compiler.base.ast.Imports cuImports = cu.getImports();
-//            for (int i = 0; cuImports != null && i < cuImports.getChildCount(); i++) {
-//                Import imp = cuImports.get(i);
-//                if (!imp.getStar() && imp != null && imp.getType() != null) {
-//                    Type type = imp.getType();
-//                    Dec dec = type.getCorrespondingDec();
-//                    if (dec != null) imports.add(StructureNodeFactory.makeLink(dec, true));
-//                }
-//            }
-//        }
-//
-//        if (!pointcutsUsed.isEmpty()) relations.add(new RelationNode(USES_POINTCUT_RELATION, USES_POINTCUT_RELATION.getForwardNavigationName(), pointcutsUsed));
-//        if (!pointcutUsedBy.isEmpty()) relations.add(new RelationNode(USES_POINTCUT_RELATION, USES_POINTCUT_RELATION.getBackNavigationName(), pointcutUsedBy));
-//        if (!imports.isEmpty()) relations.add(new RelationNode(IMPORTS_RELATION, IMPORTS_RELATION.getForwardNavigationName(), imports));
-        return relations;
-    }
-
-    public String getName() {
-        return NAME;
-    }
-}
-
-
-//public class JavadocSeeAlso {
-//
-//    private static final String DOC =
-//        "<b>Relates:</b> a declaration to another by the @seeAlso tag<br>" +
-//        "<b>Symmetric: </b> yes";
-//
-//    public List makeLinks(ASTObject astObject, boolean forwardNavigation) {
-//        List linkList = new Vector();
-//        org.aspectj.compiler.base.ast.Comment comment = astObject.getComment();
-//        try {
-//            Object[] os = (Object[])comment.getClass().getMethod("seeTags", new Class[]{}).invoke(comment, new Object[]{});
-//            for (int i = 0; i < os.length; i++) {
-//                Object o = os[i];
-//                Dec docDec = null;
-//                TypeDec typeDec = (TypeDec)o.getClass().getMethod("referencedClass", new Class[]{}).invoke(o, new Object[]{});
-//                Dec memberDec = (Dec)o.getClass().getMethod("referencedMember", new Class[]{}).invoke(o, new Object[]{});
-//                if (memberDec != null) {
-//                    docDec = memberDec;
-//                } else if (typeDec != null) {
-//                    docDec = typeDec;
-//                }
-//                if (docDec != null) {
-//                    linkList.add(StructureNodeFactory.makeLink(docDec, false));
-//
-//                }
-//            }
-//        } catch (Throwable t) {
-//            // ingore
-//        }
-//        return linkList;
-//    }
-
-
diff --git a/asm/src/org/aspectj/asm/Relation.java b/asm/src/org/aspectj/asm/Relation.java
deleted file mode 100644 (file)
index 31bfdc4..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-
-package org.aspectj.asm;
-
-import java.io.Serializable;
-
-/**
- * @author Mik Kersten
- */
-public class Relation implements Serializable {
-
-    private String forwardNavigationName;
-    private String backNavigationName;
-    private String associationName;
-    private boolean symmetrical;
-    private boolean transitive;
-
-    public Relation(String forwardNavigationName,
-                    String backNavigationName,
-                    String associationName,
-                    boolean symmetrical,
-                    boolean transitive) {
-        this.forwardNavigationName = forwardNavigationName;
-        this.backNavigationName = backNavigationName;
-        this.associationName = associationName;
-        this.symmetrical = symmetrical;
-        this.transitive = transitive;
-    }
-
-    /**
-     * Constructor for asymetrical relations.
-     */
-    public Relation(String forwardNavigationName,
-                    String associationName,
-                    boolean transitive) {
-        this(forwardNavigationName, "<no back navigation name>", associationName, false, transitive);
-    }
-
-    public String getForwardNavigationName() {
-        return forwardNavigationName;
-    }
-
-    public String getBackNavigationName() {
-        return backNavigationName;
-    }
-
-    public String getAssociationName() {
-        return associationName;
-    }
-
-    public boolean isSymmetrical() {
-        return symmetrical;
-    }
-
-    public boolean isTransitive() {
-        return transitive;
-    }
-
-       public boolean equals(Object o) {
-               if (!(o instanceof Relation)) return false;
-               Relation r = (Relation)o;
-               return forwardNavigationName.equals(r.getForwardNavigationName())
-                       && backNavigationName.equals(r.getBackNavigationName())
-                       && associationName.equals(r.getAssociationName())
-                       && (symmetrical == r.isSymmetrical())
-                       && (transitive == r.isTransitive());
-       }
-
-    public String toString() {
-        if (symmetrical) {
-            return forwardNavigationName + " / " + backNavigationName;
-        } else {
-            return forwardNavigationName;
-        }
-    }
-}
diff --git a/asm/src/org/aspectj/asm/RelationNode.java b/asm/src/org/aspectj/asm/RelationNode.java
deleted file mode 100644 (file)
index ec4c513..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.List;
-
-/**
- * @author Mik Kersten
- */
-public class RelationNode extends StructureNode {
-
-    private Relation relation;
-
-    /**
-     * Used during de-externalization.
-     */
-    public RelationNode() { }
-
-    public RelationNode(Relation relation, String name, List children) {
-        super(name, relation.getAssociationName(), children);
-        this.relation = relation;
-    }
-
-    public Relation getRelation() {
-        return relation;
-    }
-}
index 3998c41bb571fdd39d083b29da779dd25d7cd7e3..65b596d05ddfdb88e37f6a84bf99e911e0f2c876 100644 (file)
 
 package org.aspectj.asm;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
+import java.io.*;
 import java.util.*;
 
+import org.aspectj.asm.internal.ProgramElement;
 import org.aspectj.bridge.SourceLocation;
 
 /**
@@ -26,16 +25,16 @@ import org.aspectj.bridge.SourceLocation;
  */
 public class StructureModel implements Serializable {
        
-    protected  StructureNode root = null;
+    protected  IProgramElement root = null;
     protected String configFile = null;
     private Map fileMap = null;
-    public static final ProgramElementNode NO_STRUCTURE = new ProgramElementNode("<build to view structure>", ProgramElementNode.Kind.ERROR, null);
+    public static final IProgramElement NO_STRUCTURE = new ProgramElement("<build to view structure>", IProgramElement.Kind.ERROR, null);
 
-    public StructureNode getRoot() {
+    public IProgramElement getRoot() {
         return root;
     }
 
-    public void setRoot(StructureNode root) {
+    public void setRoot(IProgramElement root) {
         this.root = root;
     }
 
@@ -71,14 +70,14 @@ public class StructureModel implements Serializable {
         * @param decErrLabel
         * @return null if not found
         */
-       public ProgramElementNode findNode(ProgramElementNode parent, ProgramElementNode.Kind kind, String name) {
+       public IProgramElement findNode(IProgramElement parent, IProgramElement.Kind kind, String name) {
                for (Iterator it = parent.getChildren().iterator(); it.hasNext(); ) {
-                       ProgramElementNode node = (ProgramElementNode)it.next();
-                       if (node.getProgramElementKind().equals(kind) 
+                       IProgramElement node = (IProgramElement)it.next();
+                       if (node.getKind().equals(kind) 
                                && name.equals(node.getName())) {
                                return node;
                        } else {
-                               ProgramElementNode childSearch = findNode(node, kind, name);
+                               IProgramElement childSearch = findNode(node, kind, name);
                                if (childSearch != null) return childSearch;
                        }
                }
@@ -89,13 +88,13 @@ public class StructureModel implements Serializable {
         * @param packageName   if null default package is searched
         * @param className     can't be null
         */ 
-       public ProgramElementNode findNodeForClass(String packageName, String className) {
-               StructureNode packageNode = null;
+       public IProgramElement findNodeForClass(String packageName, String className) {
+               IProgramElement packageNode = null;
                if (packageName == null) {
                        packageNode = root;
                } else {
                        for (Iterator it = root.getChildren().iterator(); it.hasNext(); ) {
-                               StructureNode node = (StructureNode)it.next();
+                               IProgramElement node = (IProgramElement)it.next();
                                if (packageName.equals(node.getName())) {
                                        packageNode = node;
                                } 
@@ -105,15 +104,15 @@ public class StructureModel implements Serializable {
                
                // this searches each file for a class
                for (Iterator it = packageNode.getChildren().iterator(); it.hasNext(); ) {
-                       ProgramElementNode fileNode = (ProgramElementNode)it.next();
-                       ProgramElementNode ret = findClassInNodes(fileNode.getChildren(), className);
+                       IProgramElement fileNode = (IProgramElement)it.next();
+                       IProgramElement ret = findClassInNodes(fileNode.getChildren(), className);
                        if (ret != null) return ret;
                }
                
                return null;
        }
        
-       private ProgramElementNode findClassInNodes(Collection nodes, String name) {
+       private IProgramElement findClassInNodes(Collection nodes, String name) {
                String baseName;
                String innerName;
                int dollar = name.indexOf('$');
@@ -127,7 +126,7 @@ public class StructureModel implements Serializable {
                
                
                for (Iterator j = nodes.iterator(); j.hasNext(); ) {
-                       ProgramElementNode classNode = (ProgramElementNode)j.next();
+                       IProgramElement classNode = (IProgramElement)j.next();
 //                     System.err.println("checking: " + classNode + " for " + baseName);      
 //                     System.err.println("children: " + classNode.getChildren());
                        if (baseName.equals(classNode.getName())) {
@@ -145,14 +144,14 @@ public class StructureModel implements Serializable {
         * @param               sourceFilePath  modified to '/' delimited path for consistency
         * @return              a new structure node for the file if it was not found in the model
         */
-       public StructureNode findRootNodeForSourceFile(String sourceFile) {
+       public IProgramElement findRootNodeForSourceFile(String sourceFile) {
                try {
                if (!isValid() || sourceFile == null) {   
                    return StructureModel.NO_STRUCTURE;
                } else {
                    String correctedPath = new File(sourceFile).getCanonicalPath();//.replace('\\', '/');
                    //StructureNode node = (StructureNode)getFileMap().get(correctedPath);//findFileNode(filePath, model);
-                               StructureNode node = (StructureNode)findInFileMap(correctedPath);//findFileNode(filePath, model);
+                               IProgramElement node = (IProgramElement)findInFileMap(correctedPath);//findFileNode(filePath, model);
                    if (node != null) {
                        return node;
                    } else {
@@ -171,9 +170,9 @@ public class StructureModel implements Serializable {
         * @param               lineNumber              if 0 or 1 the corresponding file node will be returned
         * @return              a new structure node for the file if it was not found in the model
         */
-       public StructureNode findNodeForSourceLine(String sourceFilePath, int lineNumber) {
+       public IProgramElement findNodeForSourceLine(String sourceFilePath, int lineNumber) {
                String correctedPath = sourceFilePath;//.replace('\\', '/');
-               StructureNode node = findNodeForSourceLineHelper(root, correctedPath, lineNumber);
+               IProgramElement node = findNodeForSourceLineHelper(root, correctedPath, lineNumber);
                if (node != null) {
                        return node;    
                } else {
@@ -181,16 +180,16 @@ public class StructureModel implements Serializable {
                }
        }
 
-       private StructureNode createFileStructureNode(String sourceFilePath) {
+       private IProgramElement createFileStructureNode(String sourceFilePath) {
                String fileName = new File(sourceFilePath).getName();
-               ProgramElementNode fileNode = new ProgramElementNode(fileName, ProgramElementNode.Kind.FILE_JAVA, null);
+               IProgramElement fileNode = new ProgramElement(fileName, IProgramElement.Kind.FILE_JAVA, null);
                fileNode.setSourceLocation(new SourceLocation(new File(sourceFilePath), 1, 1));
                fileNode.addChild(NO_STRUCTURE);
                return fileNode;
        }
 
 
-       private StructureNode findNodeForSourceLineHelper(StructureNode node, String sourceFilePath, int lineNumber) {
+       private IProgramElement findNodeForSourceLineHelper(IProgramElement node, String sourceFilePath, int lineNumber) {
                if (matches(node, sourceFilePath, lineNumber) 
                        && !hasMoreSpecificChild(node, sourceFilePath, lineNumber)) {
                        return node;    
@@ -198,8 +197,8 @@ public class StructureModel implements Serializable {
                
                if (node != null && node.getChildren() != null) {
                        for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
-                               StructureNode foundNode = findNodeForSourceLineHelper(
-                                       (StructureNode)it.next(), 
+                               IProgramElement foundNode = findNodeForSourceLineHelper(
+                                       (IProgramElement)it.next(), 
                                        sourceFilePath, 
                                        lineNumber);            
                                if (foundNode != null) return foundNode;
@@ -209,7 +208,7 @@ public class StructureModel implements Serializable {
                return null;            
        }
 
-       private boolean matches(StructureNode node, String sourceFilePath, int lineNumber) {
+       private boolean matches(IProgramElement node, String sourceFilePath, int lineNumber) {
                try {                   
 //                     if (node != null && node.getSourceLocation() != null)
 //                             System.err.println("====\n1: " + 
@@ -224,17 +223,17 @@ public class StructureModel implements Serializable {
                                        && node.getSourceLocation().getEndLine() >= lineNumber)
                                    ||
                                        (lineNumber <= 1
-                                        && node instanceof ProgramElementNode 
-                                        && ((ProgramElementNode)node).getProgramElementKind().isSourceFileKind())      
+                                        && node instanceof IProgramElement 
+                                        && ((IProgramElement)node).getKind().isSourceFileKind())       
                                );
                } catch (IOException ioe) { 
                        return false;
                } 
        }
        
-       private boolean hasMoreSpecificChild(StructureNode node, String sourceFilePath, int lineNumber) {
+       private boolean hasMoreSpecificChild(IProgramElement node, String sourceFilePath, int lineNumber) {
                for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
-                       ProgramElementNode child = (ProgramElementNode)it.next();
+                       IProgramElement child = (IProgramElement)it.next();
                        if (matches(child, sourceFilePath, lineNumber)) return true;
                }
                return false;
diff --git a/asm/src/org/aspectj/asm/StructureModelListener.java b/asm/src/org/aspectj/asm/StructureModelListener.java
deleted file mode 100644 (file)
index eab786b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.EventListener;
-
-/**
- * Compiler listeners get notified of structure model update events.
- *
- * @author Mik Kersten
- */
-public interface StructureModelListener extends EventListener {
-
-    public void modelUpdated(StructureModel rootNode);
-}
index 1464a1eaf8e2ae4523ea1c951a8e8e76f9e3f77b..c99b747ad0f7104d29e91d24b3bb0e7e376a4486 100644 (file)
@@ -34,10 +34,10 @@ public class StructureModelManager {
     private List associations = new ArrayList();
 
     protected StructureModelManager() {
-        associations.add(new AdviceAssociation());
-        associations.add(new IntroductionAssociation());
-        associations.add(new InheritanceAssociation());
-        associations.add(new ReferenceAssociation());
+//        associations.add(new AdviceAssociation());
+//        associations.add(new IntroductionAssociation());
+//        associations.add(new InheritanceAssociation());
+//        associations.add(new ReferenceAssociation());
     }
 
     public StructureModel getStructureModel() {
@@ -59,62 +59,64 @@ public class StructureModelManager {
        boolean showSubMember, 
        boolean showMemberAndType) { 
         
-        if (!model.isValid()) return null;
-               
-        HashMap annotations = new HashMap();
-        StructureNode node = model.findRootNodeForSourceFile(sourceFile);
-        if (node == StructureModel.NO_STRUCTURE) {
-            return null;
-        } else {
-            ProgramElementNode fileNode = (ProgramElementNode)node;
-            ArrayList peNodes = new ArrayList();
-            getAllStructureChildren(fileNode, peNodes, showSubMember, showMemberAndType);
-            for (Iterator it = peNodes.iterator(); it.hasNext(); ) {
-                ProgramElementNode peNode = (ProgramElementNode)it.next();
-                List entries = new ArrayList();
-                entries.add(peNode);
-                ISourceLocation sourceLoc = peNode.getSourceLocation();
-                if (null != sourceLoc) {
-                    Integer hash = new Integer(sourceLoc.getLine());
-                    List existingEntry = (List)annotations.get(hash);
-                    if (existingEntry != null) {
-                        entries.addAll(existingEntry);
-                    }
-                    annotations.put(hash, entries);
-                }
-            }
-            return annotations;
-        }
-    }
-
-    private void getAllStructureChildren(ProgramElementNode node, List result, boolean showSubMember, boolean showMemberAndType) {
-        List children = node.getChildren();
-        for (Iterator it = children.iterator(); it.hasNext(); ) {
-            StructureNode next = (StructureNode)it.next();
-            if (next instanceof ProgramElementNode) {
-                ProgramElementNode pNode = (ProgramElementNode)next;
-                if (pNode != null
-                       && ((pNode.isCode() && showSubMember) || (!pNode.isCode() && showMemberAndType))
-                       && pNode.getRelations() != null 
-                       && pNode.getRelations().size() > 0) {
-                    result.add(next);
-                }
-                getAllStructureChildren((ProgramElementNode)next, result, showSubMember, showMemberAndType);
-            }
-        }
+        throw new RuntimeException("unimplemented");
+        
+//        if (!model.isValid()) return null;
+//             
+//        HashMap annotations = new HashMap();
+//        IProgramElement node = model.findRootNodeForSourceFile(sourceFile);
+//        if (node == StructureModel.NO_STRUCTURE) {
+//            return null;
+//        } else {
+//            IProgramElement fileNode = (IProgramElement)node;
+//            ArrayList peNodes = new ArrayList();
+//            getAllStructureChildren(fileNode, peNodes, showSubMember, showMemberAndType);
+//            for (Iterator it = peNodes.iterator(); it.hasNext(); ) {
+//                IProgramElement peNode = (IProgramElement)it.next();
+//                List entries = new ArrayList();
+//                entries.add(peNode);
+//                ISourceLocation sourceLoc = peNode.getSourceLocation();
+//                if (null != sourceLoc) {
+//                    Integer hash = new Integer(sourceLoc.getLine());
+//                    List existingEntry = (List)annotations.get(hash);
+//                    if (existingEntry != null) {
+//                        entries.addAll(existingEntry);
+//                    }
+//                    annotations.put(hash, entries);
+//                }
+//            }
+//            return annotations;
+//        }
     }
 
-    public void addListener(StructureModelListener listener) {
+//    private void getAllStructureChildren(IProgramElement node, List result, boolean showSubMember, boolean showMemberAndType) {
+//        List children = node.getChildren();
+//        for (Iterator it = children.iterator(); it.hasNext(); ) {
+//                     IProgramElement next = (IProgramElement)it.next();
+//            if (next instanceof IProgramElement) {
+//                IProgramElement pNode = (IProgramElement)next;
+//                if (pNode != null
+//                     && ((pNode.isCode() && showSubMember) || (!pNode.isCode() && showMemberAndType))
+//                     && pNode.getRelations() != null 
+//                     && pNode.getRelations().size() > 0) {
+//                    result.add(next);
+//                }
+//                getAllStructureChildren((IProgramElement)next, result, showSubMember, showMemberAndType);
+//            }
+//        }
+//    }
+
+    public void addListener(IStructureModelListener listener) {
         structureListeners.add(listener);
     }
 
-    public void removeStructureListener(StructureModelListener listener) {
+    public void removeStructureListener(IStructureModelListener listener) {
         structureListeners.remove(listener);
     }
 
     private void notifyListeners() {
         for (Iterator it = structureListeners.iterator(); it.hasNext(); ) {
-            ((StructureModelListener)it.next()).modelUpdated(model);
+            ((IStructureModelListener)it.next()).modelUpdated(model);
         }
     }
 
diff --git a/asm/src/org/aspectj/asm/StructureNode.java b/asm/src/org/aspectj/asm/StructureNode.java
deleted file mode 100644 (file)
index 2c3322a..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.*;
-import java.io.*;
-
-import org.aspectj.bridge.*;
-import org.aspectj.bridge.IMessage;
-
-/**
- * Children are non-repeating making the parent-child structure a strict
- * tree.
- * 
- * !!! relies on a java.io.Serializable implementation of ISourceLocation
- * 
- * @author Mik Kersten
- */
-public abstract class StructureNode implements Serializable, Comparable {
-
-       protected StructureNode parent = null;
-    protected String name = "";
-    protected String kind = "";
-    // children.listIterator() should support remove() operation
-    protected List children = new ArrayList();
-    protected IMessage message = null;
-    protected ISourceLocation sourceLocation = null;
-
-    /**
-     * Used during serialization.
-     */
-    public StructureNode() { }
-
-    public StructureNode(String name, String kind, List children) {
-        this.name = name;
-        this.kind = kind;
-        if (children != null) {
-               this.children = children;
-        }
-       setParents();
-    }
-
-    public StructureNode(String name, String kind) {
-        this.name = name;
-        this.kind = kind;
-    }
-
-       public String toLongString() {
-               final StringBuffer buffer = new StringBuffer();
-               ModelWalker walker = new ModelWalker() {
-                       private int depth = 0;
-                       
-                       public void preProcess(StructureNode node) { 
-                               for (int i = 0; i < depth; i++) buffer.append(' ');
-                               buffer.append(node.toString());
-                               buffer.append('\n');
-                               depth += 2;
-                       }
-                       
-                       public void postProcess(StructureNode node) { 
-                               depth -= 2;
-                       }
-               };
-               walker.process(this);
-               return buffer.toString();
-       }
-
-    public String toString() {
-        return  name;
-    }
-
-    public String getKind() {
-        return kind;
-    }
-
-    public List getChildren() {
-        return children;
-    }
-
-    public void addChild(StructureNode child) {
-        if (children == null) {
-            children = new ArrayList();
-        }
-        children.add(child);
-        child.setParent(this);
-    }
-    
-    public void addChild(int position, StructureNode child) {
-        if (children == null) {
-            children = new ArrayList();
-        }
-        children.add(position, child);
-        child.setParent(this);
-    }
-    
-    public boolean removeChild(StructureNode child) {
-       child.setParent(null);
-       return children.remove(child);  
-    }
-
-       public StructureNode walk(ModelWalker walker) {
-               for (Iterator it = children.iterator(); it.hasNext(); ) {
-                       StructureNode child = (StructureNode)it.next();
-                       walker.process(child);  
-               } 
-               return this;
-       }
-       
-//     public boolean equals(Object o) {
-//             if (!(o instanceof StructureNode)) return false;
-//             StructureNode sn = (StructureNode)o;
-//             return objectEqual(sn.getName(), this.getName())
-//                     && objectEqual(sn.getKind(), this.getKind())
-//                     && objectEqual(sn.getChildren(), this.getChildren());
-//     }
-//
-//     protected boolean objectEqual(Object o1, Object o2) {
-//             return (o1 == null && o2 == null) || (o1 != null && o1.equals(o2));             
-//     }
-
-    /**
-     * Comparison is string-name based only.
-     */
-    public int compareTo(Object o) throws ClassCastException {
-        if (this == o) {
-            return 0;
-        } else {
-            StructureNode sn = (StructureNode)o;
-            return this.getName().compareTo(sn.getName());
-        }
-    }
-
-    public String getName() {
-        return name;
-    }
-
-       public ISourceLocation getSourceLocation() {
-               return sourceLocation;
-       }
-
-       public void setSourceLocation(ISourceLocation sourceLocation) {
-               this.sourceLocation = sourceLocation;
-       }
-
-       public IMessage getMessage() {
-               return message;
-       }
-
-       public void setMessage(IMessage message) {
-               this.message = message;
-       }
-
-       public StructureNode getParent() {
-               return parent;
-       }
-
-       public void setParent(StructureNode parent) {
-               this.parent = parent;
-       }
-
-       private void setParents() {
-               if (children == null) return;
-               for (Iterator it = children.iterator(); it.hasNext(); ) {
-                       ((StructureNode)it.next()).setParent(this);     
-               }       
-       }
-//
-//    /**
-//     * Creates and returns a copy of this object.
-//     */
-//     public Object clone() {
-//             List cloneChildren = new ArrayList();
-//             for (Iterator it = children.iterator(); it.hasNext(); ) {
-//                     cloneChildren.add(((StructureNode)it.next()).clone());  
-//             }
-//     StructureNode cloneNode = new StructureNode(name, kind, cloneChildren);
-//     return cloneNode;
-//     } 
-
-       public void setName(String string) {
-               name = string;
-       }
-
-}
-
-
-//    private void writeObject(ObjectOutputStream s) throws IOException {
-//        s.defaultWriteObject();
-//        // customized serialization code
-//    }
-//
-//    private void readObject(ObjectInputStream s) throws IOException  {
-//        s.defaultReadObject();
-//        // customized deserialization code
-//        ...
-//        // followed by code to update the object, if necessary
-//    }
-
-//    public void writeExternal(ObjectOutput out) throws IOException {
-//        if (this instanceof ProgramElementNode) {
-//            out.writeInt(1);
-//            writeString(name, out);
-//            writeString(kind, out);
-//            ((ProgramElementNode)this).writeExternal(out);
-//        } if (this instanceof RelationNode) {
-//            out.writeInt(1);
-//            writeString(name, out);
-//            writeString(kind, out);
-//            ((RelationNode)this).writeExternal(out);
-//        } if (this instanceof LinkNode) {
-//            out.writeInt(3);
-//            writeString(name, out);
-//            writeString(kind, out);
-//            ((LinkNode)this).writeExternal(out);
-//        } else {
-//            out.writeInt(0);
-//            writeString(name, out);
-//            writeString(kind, out);
-//        }
-//    }
-//
-//    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-//        int kindint = in.readInt();
-//        name = readString(in);
-//        kind = readString(in);
-//
-//        switch (kindint) {
-//            case 1:
-//                ((StructureNode)it.next()).readExternal(in);
-//                break;
-//            case 2:
-//                ((RelationNode)it.next()).readExternal(in);
-//                break;
-//            case 3:
-//                ((LinkNode)it.next()).readExternal(in);
-//                break;
-//        }
-//    }
-//
-//    protected void writeString(String s, ObjectOutput out) throws IOException {
-//        out.writeInt(s.length());
-//        out.write(s.getBytes());
-//    }
-//
-//    protected String readString(ObjectInput in) throws IOException {
-//        int length = in.readInt();
-//        byte[] nameArray = new byte[length];
-//        in.read(nameArray, 0, length);
-//        return new String(nameArray);
-//    }
-//
-
-
diff --git a/asm/src/org/aspectj/asm/StructureNodeFactory.java b/asm/src/org/aspectj/asm/StructureNodeFactory.java
deleted file mode 100644 (file)
index 4042873..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.asm;
-
-import java.util.Hashtable;
-import java.util.List;
-
-/**
- * @author Mik Kersten
- */
-public class StructureNodeFactory {
-
-    private static Hashtable programElementNodes = new Hashtable();
-    
-    private static final ProgramElementNode UNRESOLVED_LINK_NODE = new ProgramElementNode("<error: unresolved link>", ProgramElementNode.Kind.ERROR, null, null, "", "", "", null, null, null, false);
-
-    public static void clear() {
-        programElementNodes.clear();
-    }
-
-    public static ProgramElementNode makeNode(List relations, List children) {
-        return makeNode(relations, children, false);
-    }
-
-    public static LinkNode makeLink(boolean terminal) {
-        ProgramElementNode peNode = null;
-        if (terminal) {
-            peNode = makeNode(null, null, false);
-        } else {
-               peNode = makeNode(null, null, true);
-        }
-        
-        if (peNode == null) {
-               return new LinkNode(UNRESOLVED_LINK_NODE);
-       } else {
-               return new LinkNode(peNode);
-       }
-    }
-
-    private static ProgramElementNode makeNode(List relations, List children, boolean resolve) {
-//        if (resolve) {
-//            if (astObject instanceof InitializerDec) {
-//                InitializerDec initDec = (InitializerDec)astObject;
-//                return (ProgramElementNode)programElementNodes.get(initDec.getDeclaringType().getTypeDec());
-//            } else if (astObject instanceof Decs) {
-//                Decs decs = (Decs)astObject;
-//                return (ProgramElementNode)programElementNodes.get(decs.getDeclaringType().getTypeDec());
-//            } else {
-//                ProgramElementNode peNode = (ProgramElementNode)programElementNodes.get(astObject);
-//                if (peNode == null) {
-//                    return makeNode(astObject, null, null, false);
-//                } else {
-//                    return peNode;
-//                }
-//            }
-//        } else {
-//            String declaringType = "";
-//            if (astObject.getDeclaringType() != null) {
-//                declaringType = astObject.getDeclaringType().toShortString();
-//            }
-//            
-//            org.aspectj.asm.SourceLocation sourceLocation = new org.aspectj.asm.SourceLocation(
-//             astObject.getSourceLocation().getSourceFileName(),
-//             astObject.getSourceLocation().getBeginLine(),
-//             astObject.getSourceLocation().getEndLine(),
-//             astObject.getSourceLocation().getBeginColumn());
-//            
-//            ProgramElementNode newNode = new ProgramElementNode(
-//                genSignature(astObject).trim(),
-//                genKind(astObject),
-//                genModifiers(astObject),
-//                genAccessibility(astObject),
-//                declaringType,
-//                genPackageName(astObject),
-//                genFormalComment(astObject),
-//                sourceLocation,
-//                relations,
-//                children,
-//                isMemberKind(astObject),
-//                astObject);
-//            programElementNodes.put(astObject, newNode);
-//            newNode.setRunnable(genIsRunnable(newNode));
-//            setSpecifiers(astObject, newNode);
-//            
-//            return newNode;
-//        }
-               return null;
-    }
-
-//     private static void setSpecifiers(ASTObject astObject, ProgramElementNode node) {
-//             if (astObject instanceof MethodDec) {
-//                     Method method = ((MethodDec)astObject).getMethod();
-//                     for (Iterator it = method.getDeclaringType().getDirectSuperTypes().iterator(); it.hasNext(); ) {
-//                             NameType type = (NameType)it.next();
-//                             SemanticObject so = type.findMatchingSemanticObject(method);
-//                     
-//                             if (so != null && so instanceof Method) {
-//                                     
-//                                     Method superMethod = (Method)so;
-//                                     if (so.isAbstract()) {
-//                                             node.setImplementor(true);
-//                                     } else {
-//                                             node.setOverrider(true);        
-//                                     }
-//                             }
-//                     }
-//             }
-//     }
-//
-//     private static boolean genIsRunnable(ProgramElementNode node) {
-//             if (node.getModifiers().contains(ProgramElementNode.Modifiers.STATIC)
-//                     && node.getAccessibility().equals(ProgramElementNode.Accessibility.PUBLIC)
-//                     && node.getSignature().equals("main(String[])")) {
-//                     return true;
-//             } else {
-//                     return false;
-//             }
-//     }
-//
-//    private static boolean genIsStmntKind(ASTObject astObject) {
-//        return astObject instanceof CatchClause 
-//             || astObject instanceof SOLink
-//             || astObject instanceof BasicAssignExpr;
-//    }
-//
-//    private static List genModifiers(ASTObject astObject) {
-//        List modifiers = new ArrayList();
-//        if (astObject instanceof Dec) {
-//            Dec dec = (Dec)astObject;
-//            if (dec.getModifiers().isStrict()) modifiers.add(ProgramElementNode.Modifiers.STRICTFP);
-//            if (dec.getModifiers().isAbstract()) modifiers.add(ProgramElementNode.Modifiers.ABSTRACT);
-//            if (dec.getModifiers().isSynchronized()) modifiers.add(ProgramElementNode.Modifiers.SYNCHRONIZED);
-//            if (dec.getModifiers().isNative()) modifiers.add(ProgramElementNode.Modifiers.NATIVE);
-//            if (dec.getModifiers().isFinal()) modifiers.add(ProgramElementNode.Modifiers.FINAL);
-//            if (dec.getModifiers().isTransient()) modifiers.add(ProgramElementNode.Modifiers.TRANSIENT);
-//            if (dec.getModifiers().isStatic()) modifiers.add(ProgramElementNode.Modifiers.STATIC);
-//            if (dec.getModifiers().isVolatile()) modifiers.add(ProgramElementNode.Modifiers.VOLATILE);
-//        }
-//        return modifiers;
-//    }
-//
-//    private static ProgramElementNode.Accessibility genAccessibility(ASTObject astObject) {
-//        //List modifiers = new ArrayList();
-//        if (astObject instanceof Dec) {
-//            Dec dec = (Dec)astObject;
-//            if (dec.getModifiers().isPublic()) return ProgramElementNode.Accessibility.PUBLIC;
-//            if (dec.getModifiers().isProtected()) return ProgramElementNode.Accessibility.PROTECTED;
-//            if (dec.getModifiers().isPrivileged()) return ProgramElementNode.Accessibility.PRIVILEGED;
-//            if (dec.getModifiers().isPackagePrivate()) return ProgramElementNode.Accessibility.PACKAGE;
-//            if (dec.getModifiers().isPrivate()) return ProgramElementNode.Accessibility.PRIVATE;
-//        }
-//        return ProgramElementNode.Accessibility.PUBLIC;
-//    }
-//
-//    /**
-//     * @todo special cases should be fixes to AST nodes, this should have no instanceof tests.
-//     */
-//    private static ProgramElementNode.Kind genKind(ASTObject astObject) {
-//        if (astObject instanceof CompilationUnit) {
-//            return ProgramElementNode.Kind.FILE_JAVA;
-//        } else if (genIsStmntKind(astObject)) {
-//            return ProgramElementNode.Kind.CODE;
-//        } else if (astObject instanceof Dec) {
-//            String kindString = ((Dec)astObject).getKind();
-//            return ProgramElementNode.Kind.getKindForString(kindString);
-//        } else {
-//            return ProgramElementNode.Kind.ERROR;
-//        }
-//    }
-//
-//    private static boolean isMemberKind(ASTObject astObject) {
-//        if (astObject instanceof Dec) {
-//            Dec dec = (Dec)astObject;
-//            return dec.getDeclaringType() != null && !dec.getDeclaringType().equals(dec.getName());
-//        } else {
-//            return false;
-//        }
-//    }
-//
-//    private static String genPackageName(ASTObject astObject) {
-//        if (astObject instanceof TypeDec) {
-//            return ((TypeDec)astObject).getPackageName();
-//        } else if (astObject instanceof CompilationUnit) {
-//            return ((CompilationUnit)astObject).getPackageName();
-//        } else if (astObject.getDeclaringType() != null) {
-//            return astObject.getDeclaringType().getPackageName();
-//        } else {
-//            return "";
-//        }
-//    }
-//
-//    private static String genDeclaringType(ASTObject astObject) {
-//        if (astObject != null && astObject.getDeclaringType() != null) {
-//            return astObject.getDeclaringType().toShortString();
-//        } else {
-//            return null;
-//        }
-//    }
-//
-//    /**
-//     * Tries to return the ajdoc generated comment, otherwise returns the raw comment.
-//     */
-//    private static String genFormalComment(ASTObject astObject) {
-//        try {
-//            return (String)astObject.getComment().getClass().getMethod("commentText", new Class[]{}).invoke(astObject.getComment(), new Object[]{});
-//        } catch (Throwable t) {
-//            if (astObject != null) {
-//                return astObject.getFormalComment();
-//            } else {
-//                return "";
-//            }
-//        }
-//    }
-//
-//    /**
-//     * Specialized signature generation for nodes in the structure model.
-//     *
-//     * @todo    the compiler should generate these names, doing it this way is atrocious
-//     */
-//    private static String genSignature(ASTObject astObject) {
-//        String name = "";
-//        if (astObject instanceof CompilationUnit) {
-//            return astObject.getSourceFile().getName();
-//        } else if (astObject instanceof MethodDec) {
-//            Method method = ((MethodDec)astObject).getMethod();
-//            return method.getName() + method.getFormals().toShortString();
-//        } else if (astObject instanceof TypeDec) {
-//            return ((TypeDec)astObject).getSourceExtendedId();
-//        } else if (astObject instanceof FieldDec) {
-//            return ((FieldDec)astObject).getName();
-//        } else if (astObject instanceof ConstructorDec) {
-//            ConstructorDec constructorDec = (ConstructorDec)astObject;
-//            return constructorDec.getDeclaringType().getSourceExtendedId() + constructorDec.getFormals().toShortString();
-//      }  else if (astObject instanceof IntroducedDec) {
-//            IntroducedDec introDec = (IntroducedDec)astObject;
-//            return introDec.getTargets().toShortString() + '.' + genSignature(introDec.getDec());
-////            introDec.toShortString();
-//        } else if (astObject instanceof PointcutDec) {
-//            PointcutDec pointcutDec = (PointcutDec)astObject;
-//            return pointcutDec.getName() + pointcutDec.getFormals().toShortString();
-////        } else if (astObject instanceof CallExpr) {
-////            CallExpr call = (CallExpr)astObject;
-////            name = call.get;
-//        } else if (astObject instanceof ShowErrorDec) {
-//            ShowErrorDec errorDec = (ShowErrorDec)astObject;
-//            return errorDec.toShortString();
-//        } else if (astObject instanceof SoftThrowableDec) {
-//            SoftThrowableDec softThrowableDec = (SoftThrowableDec)astObject;
-//            return softThrowableDec.toShortString();
-//        } else if (astObject instanceof IntroducedSuperDec) {
-//            IntroducedSuperDec introducedSuperDec = (IntroducedSuperDec)astObject;
-//            return introducedSuperDec.toShortString();
-//        } else if (astObject instanceof AdviceDec) {
-//            AdviceDec adviceDec = (AdviceDec)astObject;
-//            return adviceDec.toShortString();
-//        } else if (astObject instanceof SOLink) {
-//            SOLink soLink = (SOLink)astObject;
-//            return genSignature(soLink.getTarget().getCorrespondingDec());
-//        } else if (astObject instanceof CatchClause) {
-//            CatchClause catchClause = (CatchClause)astObject;
-//            return catchClause.getFormal().getType().getSourceExtendedId();
-//        } else if (astObject instanceof BasicAssignExpr) {
-//             return astObject.unparse();
-////           } else if (genIsStmntKind(astObject)) {
-////            name = astObject.unparse();
-////            name = name.replace('/', ' ');
-////            name = name.replace('*', ' ');
-////            name = name.replace('\n', ' ');
-////            name.trim();
-////            java.util.StringTokenizer st = new java.util.StringTokenizer(name, " ");
-////            String s = "";
-////            while (st.hasMoreElements()) {
-////                s += ((String)st.nextElement()).trim() + " ";
-////            }
-////            name = s;
-////            int endIndex = name.indexOf(')');
-////            if (endIndex != -1) {
-////                name = name.substring(0, endIndex+1);
-////            }
-////            if (name.startsWith("this.")) {
-////                name = name.substring(5);
-////            }
-//        } else {
-//            return "? " + astObject.toShortString();
-//        }
-//    }
-}
diff --git a/asm/src/org/aspectj/asm/internal/ProgramElement.java b/asm/src/org/aspectj/asm/internal/ProgramElement.java
new file mode 100644 (file)
index 0000000..5fd769e
--- /dev/null
@@ -0,0 +1,364 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ * ******************************************************************/
+
+
+package org.aspectj.asm.internal;
+
+import java.util.*;
+
+import org.aspectj.asm.*;
+import org.aspectj.bridge.*;
+import org.aspectj.bridge.IMessage.Kind;
+
+
+/**
+ * @author Mik Kersten
+ */
+public class ProgramElement implements IProgramElement {
+               
+       protected IProgramElement parent = null;
+       protected String name = "";
+       // children.listIterator() should support remove() operation
+       protected List children = new ArrayList();
+       protected IMessage message = null;
+       protected ISourceLocation sourceLocation = null;
+               
+       private List modifiers = new ArrayList();
+       private List relations = new ArrayList();
+
+       private Kind kind;
+       private Accessibility accessibility;
+       private String declaringType = "";
+       private String formalComment = "";
+       private String packageName = null;
+       private boolean runnable = false;
+       private boolean implementor = false; 
+       private boolean overrider = false;
+    
+       private String bytecodeName;
+       private String bytecodeSignature;
+       private String fullSignature;
+       private String returnType;
+    
+       /**
+        * Used during de-externalization.
+        */
+       public ProgramElement() { }
+
+       /**
+        * Use to create program element nodes that do not correspond to source locations.
+        */
+       public ProgramElement(
+               String name, 
+               Kind kind, 
+               List children) {
+               this.name = name;
+               this.kind = kind;
+               setChildren(children);
+//             System.err.println("> created: " + name + ", children: " + children);
+       }
+       
+       public ProgramElement(
+               String name,
+               IProgramElement.Kind kind,
+               ISourceLocation sourceLocation,
+               int modifiers,
+               String formalComment,
+               List children)
+       {
+               this(name, kind, children);
+               this.sourceLocation = sourceLocation;
+               this.kind = kind;
+               this.formalComment = formalComment;
+               this.modifiers = genModifiers(modifiers);
+               this.accessibility = genAccessibility(modifiers);
+       }
+       
+       /**
+        * Use to create program element nodes that correspond to source locations.
+        */
+       public ProgramElement(
+               String name, 
+               Kind kind, 
+               List modifiers, 
+               Accessibility accessibility,
+               String declaringType, 
+               String packageName, 
+               String formalComment, 
+               ISourceLocation sourceLocation,
+               List relations, 
+               List children, 
+               boolean member) {
+
+               this(name, kind, children);
+               this.sourceLocation = sourceLocation;
+               this.kind = kind;
+               this.modifiers = modifiers;
+               this.accessibility = accessibility;
+               this.declaringType = declaringType;
+               this.packageName = packageName;
+               this.formalComment = formalComment;
+               this.relations = relations;
+       }
+
+       public List getModifiers() {
+               return modifiers;
+       }
+
+       public Accessibility getAccessibility() {
+               return accessibility;
+       }
+
+       public String getDeclaringType() {
+               return declaringType;
+       }
+
+       public String getPackageName() {
+               if (kind == Kind.PACKAGE) return getSignature();
+               if (getParent() == null || !(getParent() instanceof IProgramElement)) {
+                       return "";
+               }
+               return ((IProgramElement)getParent()).getPackageName();
+       }
+
+       public Kind getKind() {
+               return kind;
+       }
+
+       public String getSignature() {
+               return name;
+       }
+
+       public boolean isCode() {
+               return kind.equals(Kind.CODE);
+       }
+
+       public ISourceLocation getSourceLocation() {
+               return sourceLocation;
+       }
+
+       public void setSourceLocation(ISourceLocation sourceLocation) {
+               this.sourceLocation = sourceLocation;
+       }
+
+       public IMessage getMessage() {
+               return message;
+       }
+
+       public void setMessage(IMessage message) {
+               this.message = message;
+       }
+
+       public IProgramElement getParent() {
+               return parent;
+       }
+
+       public void setParent(IProgramElement parent) {
+               this.parent = parent;
+       }
+
+       public boolean isMemberKind() {
+               return kind.isMemberKind();
+       }
+
+       public void setRunnable(boolean value) {
+               this.runnable = value;  
+       }
+
+       public boolean isRunnable() {
+               return runnable;        
+       }
+
+       public boolean isImplementor() {
+               return implementor;     
+       }
+
+       public void setImplementor(boolean value) {
+               this.implementor = value;       
+       }
+       
+       public boolean isOverrider() {
+               return overrider;               
+       }
+
+       public void setOverrider(boolean value) {
+               this.overrider = value; 
+       }
+
+       public List getRelations() {
+               return relations;
+       }
+
+       public void setRelations(List relations) {
+               if (relations.size() > 0) {
+                       this.relations = relations;
+               }
+       }
+
+       public String getFormalComment() {
+               return formalComment;
+       }
+
+       public String toString() {
+               return getName();
+       }
+
+       public static List genModifiers(int modifiers) {
+               List modifiersList = new ArrayList();
+               if ((modifiers & AccStatic) != 0) modifiersList.add(IProgramElement.Modifiers.STATIC);
+               if ((modifiers & AccFinal) != 0) modifiersList.add(IProgramElement.Modifiers.STATIC);
+               if ((modifiers & AccSynchronized) != 0) modifiersList.add(IProgramElement.Modifiers.STATIC);
+               if ((modifiers & AccVolatile) != 0) modifiersList.add(IProgramElement.Modifiers.STATIC);
+               if ((modifiers & AccTransient) != 0) modifiersList.add(IProgramElement.Modifiers.STATIC);
+               if ((modifiers & AccNative) != 0) modifiersList.add(IProgramElement.Modifiers.STATIC);
+               if ((modifiers & AccAbstract) != 0) modifiersList.add(IProgramElement.Modifiers.STATIC);
+               return modifiersList;           
+       }
+
+       public static IProgramElement.Accessibility genAccessibility(int modifiers) {
+               if ((modifiers & AccPublic) != 0) return IProgramElement.Accessibility.PUBLIC;
+               if ((modifiers & AccPrivate) != 0) return IProgramElement.Accessibility.PRIVATE;
+               if ((modifiers & AccProtected) != 0) return IProgramElement.Accessibility.PROTECTED;
+               if ((modifiers & AccPrivileged) != 0) return IProgramElement.Accessibility.PRIVILEGED;
+               else return IProgramElement.Accessibility.PACKAGE;
+       }
+
+
+       
+       // XXX these names and values are from org.eclipse.jdt.internal.compiler.env.IConstants
+       private static int AccPublic = 0x0001;
+       private static int AccPrivate = 0x0002;
+       private static int AccProtected = 0x0004;
+       private static int AccPrivileged = 0x0006;  // XXX is this right?
+       private static int AccStatic = 0x0008;
+       private static int AccFinal = 0x0010;
+       private static int AccSynchronized = 0x0020;
+       private static int AccVolatile = 0x0040;
+       private static int AccTransient = 0x0080;
+       private static int AccNative = 0x0100;
+       private static int AccInterface = 0x0200;
+       private static int AccAbstract = 0x0400;
+       private static int AccStrictfp = 0x0800;
+       
+       
+       public String getBytecodeName() {
+               return bytecodeName;
+       }
+
+       public String getBytecodeSignature() {
+               return bytecodeSignature;
+       }
+
+       public void setBytecodeName(String bytecodeName) {
+               this.bytecodeName = bytecodeName;
+       }
+
+       public void setBytecodeSignature(String bytecodeSignature) {
+               this.bytecodeSignature = bytecodeSignature;
+       }
+
+       public String getFullSignature() {
+               return fullSignature;
+       }
+
+       public void setFullSignature(String string) {
+               fullSignature = string;
+       }
+       
+       public void setKind(Kind kind) {
+               this.kind = kind;
+       }
+
+       public void setReturnType(String returnType) {
+               this.returnType = returnType;
+       }
+
+       public String getReturnType() {
+               return returnType;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public List getChildren() {
+               return children;
+       }
+
+       public void setChildren(List children) {
+               this.children = children;
+               if (children == null) return;
+               for (Iterator it = children.iterator(); it.hasNext(); ) {
+                       ((IProgramElement)it.next()).setParent(this);   
+               }
+       }
+
+       public void addChild(IProgramElement child) {
+               if (children == null) {
+                       children = new ArrayList();
+               }
+               children.add(child);
+               child.setParent(this);
+       }
+    
+       public void addChild(int position, IProgramElement child) {
+               if (children == null) {
+                       children = new ArrayList();
+               }
+               children.add(position, child);
+               child.setParent(this);
+       }
+    
+       public boolean removeChild(IProgramElement child) {
+               child.setParent(null);
+               return children.remove(child);  
+       }
+       
+       public void setName(String string) {
+               name = string;
+       }
+
+//     private void setParents() {
+////           System.err.println(">> setting parents on: " + name);
+//             if (children == null) return;
+//             for (Iterator it = children.iterator(); it.hasNext(); ) {
+//                     ((IProgramElement)it.next()).setParent(this);   
+//             }       
+//     }
+
+       public IProgramElement walk(HierarchyWalker walker) {
+               for (Iterator it = children.iterator(); it.hasNext(); ) {
+                       IProgramElement child = (IProgramElement)it.next();
+                       walker.process(child);  
+               } 
+               return this;
+       }
+       
+       public String toLongString() {
+               final StringBuffer buffer = new StringBuffer();
+               HierarchyWalker walker = new HierarchyWalker() {
+                       private int depth = 0;
+                       
+                       public void preProcess(IProgramElement node) { 
+                               for (int i = 0; i < depth; i++) buffer.append(' ');
+                               buffer.append(node.toString());
+                               buffer.append('\n');
+                               depth += 2;
+                       }
+                       
+                       public void postProcess(IProgramElement node) { 
+                               depth -= 2;
+                       }
+               };
+               walker.process(this);
+               return buffer.toString();
+       }
+}
+
diff --git a/asm/src/org/aspectj/asm/internal/Relationship.java b/asm/src/org/aspectj/asm/internal/Relationship.java
new file mode 100644 (file)
index 0000000..bb26501
--- /dev/null
@@ -0,0 +1,53 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ * ******************************************************************/
+
+
+package org.aspectj.asm.internal;
+
+import java.util.List;
+
+import org.aspectj.asm.*;
+import org.aspectj.asm.IRelationship;
+import org.aspectj.asm.IRelationship.Kind;
+
+
+/**
+ * @author Mik Kersten
+ */
+public class Relationship implements IRelationship {
+       
+       private String name = null;
+       private IProgramElement source = null;
+       private List/*IProgramElement*/ targets = null;
+       private Kind kind = null;
+       
+       public Relationship(String name, IProgramElement source, List targets, Kind kind) {
+               this.name = name;
+               this.source = source;
+               this.targets = targets;
+               this.kind = kind;
+       }
+       
+       public String getName() {
+               return null;
+       }
+       
+       public IProgramElement getSource() {
+               return null;
+       }
+
+       public List getTargets() {
+               return null;
+       }
+
+       public Kind getKind() {
+               return null;
+       }
+}
index e9f9f04029ce47027f91d3a7483b29cca5e24cee..244ab288c0d19d8db94a5c138badb9ec90523cc6 100644 (file)
@@ -15,19 +15,16 @@ package org.aspectj.ajdt.internal.compiler.lookup;
 
 import java.util.*;
 
-import org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration;
-import org.aspectj.ajdt.internal.compiler.ast.AstUtil;
-import org.aspectj.ajdt.internal.core.builder.AjBuildManager;
-import org.aspectj.ajdt.internal.core.builder.AsmBuilder;
+import org.aspectj.ajdt.internal.compiler.ast.*;
+import org.aspectj.ajdt.internal.core.builder.*;
 import org.aspectj.bridge.ISourceLocation;
 import org.aspectj.bridge.IMessage.Kind;
 import org.aspectj.weaver.*;
+import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.ast.*;
-import org.eclipse.jdt.internal.compiler.impl.Constant;
-import org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
+import org.eclipse.jdt.internal.compiler.impl.*;
 import org.eclipse.jdt.internal.compiler.lookup.*;
-import org.eclipse.jdt.core.compiler.CharOperation;
-
 /**
  * 
  * @author Jim Hugunin
@@ -300,7 +297,7 @@ public class EclipseFactory {
 
        public void finishedCompilationUnit(CompilationUnitDeclaration unit) {
                if (buildManager.doGenerateModel()) {
-                       AsmBuilder.build(unit, buildManager.getStructureModel());
+                       AsmHierarchyBuilder.build(unit, buildManager.getStructureModel());
                }
        }
 
index ab0551dbe86016c4a065faa751862ea2a744e0a2..162f852d0bae9d6965103b502b1a41bce8d0bfd3 100644 (file)
 
 package org.aspectj.ajdt.internal.core.builder;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.util.*;
-import java.util.jar.Attributes;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
+import java.util.jar.*;
 
 import org.aspectj.ajdt.internal.compiler.AjCompiler;
-import org.aspectj.ajdt.internal.compiler.lookup.AjLookupEnvironment;
-import org.aspectj.ajdt.internal.compiler.lookup.EclipseFactory;
+import org.aspectj.ajdt.internal.compiler.lookup.*;
 import org.aspectj.ajdt.internal.compiler.parser.AjParser;
 import org.aspectj.ajdt.internal.compiler.problem.AjProblemReporter;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.asm.StructureModelManager;
+import org.aspectj.asm.*;
+import org.aspectj.asm.internal.ProgramElement;
 import org.aspectj.bridge.*;
 import org.aspectj.weaver.World;
-import org.aspectj.weaver.bcel.BcelWeaver;
-import org.aspectj.weaver.bcel.BcelWorld;
-import org.aspectj.weaver.bcel.UnwovenClassFile;
-import org.eclipse.jdt.core.compiler.CharOperation;
-import org.eclipse.jdt.core.compiler.IProblem;
+import org.aspectj.weaver.bcel.*;
+import org.eclipse.jdt.core.compiler.*;
 import org.eclipse.jdt.internal.compiler.*;
-import org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
+import org.eclipse.jdt.internal.compiler.batch.*;
 import org.eclipse.jdt.internal.compiler.batch.FileSystem;
-import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
-import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
+import org.eclipse.jdt.internal.compiler.env.*;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
 import org.eclipse.jdt.internal.compiler.util.HashtableOfObject;
@@ -177,15 +168,15 @@ public class AjBuildManager {
     private void setupModel() {
         String rootLabel = "<root>";
         StructureModel model = StructureModelManager.getDefault().getStructureModel();
-        ProgramElementNode.Kind kind = ProgramElementNode.Kind.FILE_JAVA;
+        IProgramElement.Kind kind = IProgramElement.Kind.FILE_JAVA;
         if (buildConfig.getConfigFile() != null) {
             rootLabel = buildConfig.getConfigFile().getName();
             model.setConfigFile(
                 buildConfig.getConfigFile().getAbsolutePath()
             );
-            kind = ProgramElementNode.Kind.FILE_LST;  
+            kind = IProgramElement.Kind.FILE_LST;  
         }
-        model.setRoot(new ProgramElementNode(rootLabel, kind, new ArrayList()));
+        model.setRoot(new ProgramElement(rootLabel, kind, new ArrayList()));
                 
         HashMap modelFileMap = new HashMap();
         model.setFileMap(new HashMap());
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java
deleted file mode 100644 (file)
index 3c35289..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Common Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/cpl-v10.html 
- *  
- * Contributors: 
- *     PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.ajdt.internal.core.builder;
-
-import java.io.*;
-import java.util.*;
-
-import org.aspectj.ajdt.internal.compiler.ast.*;
-import org.aspectj.ajdt.internal.compiler.lookup.EclipseFactory;
-import org.aspectj.asm.*;
-import org.aspectj.bridge.*;
-import org.aspectj.util.LangUtil;
-import org.aspectj.weaver.*;
-import org.aspectj.weaver.patterns.*;
-import org.eclipse.jdt.internal.compiler.*;
-import org.eclipse.jdt.internal.compiler.ast.*;
-import org.eclipse.jdt.internal.compiler.lookup.*;
-import org.eclipse.jdt.internal.compiler.problem.ProblemHandler;
-
-public class AsmBuilder extends AbstractSyntaxTreeVisitorAdapter {
-       
-    public static void build(
-        CompilationUnitDeclaration unit,
-        StructureModel structureModel) {
-        LangUtil.throwIaxIfNull(unit, "unit");
-          
-        new AsmBuilder(unit.compilationResult()).internalBuild(unit, structureModel);
-    }
-
-       private final Stack stack;
-       private final CompilationResult currCompilationResult;
-       private AsmNodeFormatter formatter = new AsmNodeFormatter();
-       
-    protected AsmBuilder(CompilationResult result) {
-        LangUtil.throwIaxIfNull(result, "result");
-        currCompilationResult = result;
-        stack = new Stack();
-    }
-          
-    /** 
-     * Called only by 
-     * build(CompilationUnitDeclaration unit, StructureModel structureModel) 
-     */
-    private void internalBuild(
-        CompilationUnitDeclaration unit, 
-        StructureModel structureModel) {
-        LangUtil.throwIaxIfNull(structureModel, "structureModel");
-        if (!currCompilationResult.equals(unit.compilationResult())) {
-            throw new IllegalArgumentException("invalid unit: " + unit);
-        }
-        // ---- summary
-        // add unit to package (or root if no package),
-        // first removing any duplicate (XXX? removes children if 3 classes in same file?)
-        // push the node on the stack
-        // and traverse
-        
-        // -- create node to add
-        final File file = new File(new String(unit.getFileName()));
-        final ProgramElementNode cuNode;
-        {
-            // AMC - use the source start and end from the compilation unit decl
-            int startLine = getStartLine(unit);
-            int endLine = getEndLine(unit);     
-            ISourceLocation sourceLocation 
-                = new SourceLocation(file, startLine, endLine);
-            cuNode = new ProgramElementNode(
-                new String(file.getName()),
-                ProgramElementNode.Kind.FILE_JAVA,
-                sourceLocation,
-                0,
-                "",
-                new ArrayList());
-        }
-
-        // -- get node (package or root) to add to
-        final StructureNode addToNode;
-        {
-            ImportReference currentPackage = unit.currentPackage;
-            if (null == currentPackage) {
-                addToNode = structureModel.getRoot();
-            } else {
-                String pkgName;
-                {
-                    StringBuffer nameBuffer = new StringBuffer();
-                    final char[][] importName = currentPackage.getImportName();
-                    final int last = importName.length-1;
-                    for (int i = 0; i < importName.length; i++) {
-                        nameBuffer.append(new String(importName[i]));
-                        if (i < last) {
-                            nameBuffer.append('.');
-                        } 
-                    }
-                    pkgName = nameBuffer.toString();
-                }
-            
-                ProgramElementNode pkgNode = null;
-                for (Iterator it = structureModel.getRoot().getChildren().iterator(); 
-                    it.hasNext(); ) {
-                    ProgramElementNode currNode = (ProgramElementNode)it.next();
-                    if (pkgName.equals(currNode.getName())) {
-                        pkgNode = currNode;
-                        break; // any reason not to quit when found?
-                    } 
-                }
-                if (pkgNode == null) {
-                    // note packages themselves have no source location
-                    pkgNode = new ProgramElementNode(
-                        pkgName, 
-                        ProgramElementNode.Kind.PACKAGE, 
-                        new ArrayList());
-                    structureModel.getRoot().addChild(pkgNode);
-                }
-                addToNode = pkgNode;
-            }
-        }
-        
-        // -- remove duplicates before adding (XXX use them instead?)
-        for (ListIterator itt = addToNode.getChildren().listIterator(); itt.hasNext(); ) {
-            ProgramElementNode child = (ProgramElementNode)itt.next();
-            ISourceLocation childLoc = child.getSourceLocation();
-            if (null == childLoc) {
-                // XXX ok, packages have null source locations
-                // signal others?
-            } else if (childLoc.getSourceFile().equals(file)) {
-                itt.remove();
-            }
-        }
-        // -- add and traverse
-        addToNode.addChild(cuNode);     
-        stack.push(cuNode);
-        unit.traverse(this, unit.scope);  
-        
-        // -- update file map (XXX do this before traversal?)
-        try {
-            structureModel.addToFileMap(file.getCanonicalPath(), cuNode);
-        } catch (IOException e) { 
-            System.err.println("IOException " + e.getMessage() 
-                + " creating path for " + file );
-            // XXX signal IOException when canonicalizing file path
-        }
-    }
-
-       public boolean visit(TypeDeclaration typeDeclaration, CompilationUnitScope scope) {
-               String name = new String(typeDeclaration.name);
-               ProgramElementNode.Kind kind = ProgramElementNode.Kind.CLASS;
-               if (typeDeclaration instanceof AspectDeclaration) kind = ProgramElementNode.Kind.ASPECT;
-               else if (typeDeclaration.isInterface()) kind = ProgramElementNode.Kind.INTERFACE;
-
-               ProgramElementNode peNode = new ProgramElementNode(
-                       name,
-                       kind,
-                       makeLocation(typeDeclaration),
-                       typeDeclaration.modifiers,                      "",
-                       new ArrayList());
-               
-//             peNode.setFullSignature(typeDeclaration.());
-               
-               ((StructureNode)stack.peek()).addChild(peNode);
-               stack.push(peNode);
-               return true;
-       }
-       public void endVisit(TypeDeclaration typeDeclaration, CompilationUnitScope scope) {
-               stack.pop();
-       }
-       
-       // ??? share impl with visit(TypeDeclaration, ..) ?
-       public boolean visit(MemberTypeDeclaration memberTypeDeclaration, ClassScope scope) {
-               String name = new String(memberTypeDeclaration.name);
-               //System.err.println("member type with name: " + name);
-               
-               ProgramElementNode.Kind kind = ProgramElementNode.Kind.CLASS;
-               if (memberTypeDeclaration instanceof AspectDeclaration) kind = ProgramElementNode.Kind.ASPECT;
-               else if (memberTypeDeclaration.isInterface()) kind = ProgramElementNode.Kind.INTERFACE;
-
-               ProgramElementNode peNode = new ProgramElementNode(
-                       name,
-                       kind,
-                       makeLocation(memberTypeDeclaration),
-                       memberTypeDeclaration.modifiers,
-                       "",
-                       new ArrayList());
-               
-               peNode.setFullSignature(memberTypeDeclaration.toString());
-               
-               ((StructureNode)stack.peek()).addChild(peNode);
-               stack.push(peNode);
-               return true;
-       }
-       public void endVisit(MemberTypeDeclaration memberTypeDeclaration, ClassScope scope) {
-               stack.pop();
-       }
-       
-       public boolean visit(LocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
-               String name = new String(memberTypeDeclaration.name);
-               
-               String fullName = "<undefined>";
-               if (memberTypeDeclaration.binding != null
-                       && memberTypeDeclaration.binding.constantPoolName() != null) {
-                       fullName = new String(memberTypeDeclaration.binding.constantPoolName());
-               }
-                
-               int dollar = fullName.indexOf('$');
-               fullName = fullName.substring(dollar+1);
-//             
-//             System.err.println("member type with name: " + name + ", " + 
-//                             new String(fullName));
-               
-               ProgramElementNode.Kind kind = ProgramElementNode.Kind.CLASS;
-               if (memberTypeDeclaration.isInterface()) kind = ProgramElementNode.Kind.INTERFACE;
-
-               ProgramElementNode peNode = new ProgramElementNode(
-                       fullName,
-                       kind,
-                       makeLocation(memberTypeDeclaration),
-                       memberTypeDeclaration.modifiers,
-                       "",
-                       new ArrayList());
-               
-               //??? we add this to the compilation unit
-               findEnclosingClass(stack).addChild(peNode);
-               stack.push(peNode);
-               return true;
-       }
-       public void endVisit(LocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
-               stack.pop();
-       }
-       
-       public boolean visit(AnonymousLocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
-               return visit((LocalTypeDeclaration)memberTypeDeclaration, scope);
-       }
-
-       public void endVisit(AnonymousLocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
-               stack.pop();
-       }
-       
-       private StructureNode findEnclosingClass(Stack stack) {
-               for (int i = stack.size()-1; i >= 0; i--) {
-                       ProgramElementNode pe = (ProgramElementNode)stack.get(i);
-                       if (pe.getProgramElementKind() == ProgramElementNode.Kind.CLASS) {
-                               return pe;
-                       }
-                       
-               }
-               return (StructureNode)stack.peek();
-       }       
-       
-       public boolean visit(MethodDeclaration methodDeclaration, ClassScope scope) {           
-               ProgramElementNode peNode = new ProgramElementNode(
-                       "",
-                       ProgramElementNode.Kind.ERROR,
-                       makeLocation(methodDeclaration),
-                       methodDeclaration.modifiers,
-                       "",
-                       new ArrayList());
-
-               formatter.genLabelAndKind(methodDeclaration, peNode);
-               genBytecodeInfo(methodDeclaration, peNode);
-
-               // TODO: should improve determining what the main method is
-               if (peNode.getProgramElementKind().equals(ProgramElementNode.Kind.METHOD)) {
-                       if (peNode.getName().equals("main")) {
-                               ((ProgramElementNode)stack.peek()).setRunnable(true);
-                       }       
-               }
-               
-               stack.push(peNode);
-               return true;
-       }
-
-       private void genBytecodeInfo(MethodDeclaration methodDeclaration, ProgramElementNode peNode) {
-               if (methodDeclaration.binding != null) {
-                       String memberName = "";
-                       String memberBytecodeSignature = "";
-                       try {
-                               Member member = EclipseFactory.makeResolvedMember(methodDeclaration.binding);
-                               memberName = member.getName();
-                               memberBytecodeSignature = member.getSignature();
-                       } catch (NullPointerException npe) {
-                               memberName = "<undefined>";
-                       }
-               
-                       peNode.setBytecodeName(memberName);
-                       peNode.setBytecodeSignature(memberBytecodeSignature);
-               }
-               ((StructureNode)stack.peek()).addChild(peNode);
-       }
-
-       public void endVisit(MethodDeclaration methodDeclaration, ClassScope scope) {
-               stack.pop();
-       }
-
-       public boolean visit(FieldDeclaration fieldDeclaration, MethodScope scope) {            
-               ProgramElementNode peNode = new ProgramElementNode(
-                       new String(fieldDeclaration.name),
-                       ProgramElementNode.Kind.FIELD,  
-                       makeLocation(fieldDeclaration),
-                       fieldDeclaration.modifiers,
-                       "",
-                       new ArrayList());       
-               ((StructureNode)stack.peek()).addChild(peNode);
-               stack.push(peNode);
-               return true;            
-       }
-       public void endVisit(FieldDeclaration fieldDeclaration, MethodScope scope) {
-               stack.pop();
-       }
-
-
-//     public boolean visit(ImportReference importRef, CompilationUnitScope scope) {
-//             ProgramElementNode peNode = new ProgramElementNode(
-//                     new String(importRef.toString()),
-//                     ProgramElementNode.Kind.,       
-//                     makeLocation(importRef),
-//                     0,
-//                     "",
-//                     new ArrayList());       
-//             ((StructureNode)stack.peek()).addChild(0, peNode);
-//             stack.push(peNode);
-//             return true;    
-//     }
-//     public void endVisit(ImportReference importRef,CompilationUnitScope scope) {
-//             stack.pop();            
-//     }
-
-       public boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope scope) {
-               if (constructorDeclaration.isDefaultConstructor) {
-                       stack.push(null); // a little wierd but does the job
-                       return true;    
-               }
-               ProgramElementNode peNode = new ProgramElementNode(
-                       new String(constructorDeclaration.selector),
-                       ProgramElementNode.Kind.CONSTRUCTOR,    
-                       makeLocation(constructorDeclaration),
-                       constructorDeclaration.modifiers,
-                       "",
-                       new ArrayList());       
-               ((StructureNode)stack.peek()).addChild(peNode);
-               stack.push(peNode);
-               return true;    
-       }
-       public void endVisit(ConstructorDeclaration constructorDeclaration, ClassScope scope) {
-               stack.pop();
-       }
-
-//     public boolean visit(Clinit clinit, ClassScope scope) {
-//             ProgramElementNode peNode = new ProgramElementNode(
-//                     "<clinit>",
-//                     ProgramElementNode.Kind.INITIALIZER,    
-//                     makeLocation(clinit),
-//                     clinit.modifiers,
-//                     "",
-//                     new ArrayList());       
-//             ((StructureNode)stack.peek()).addChild(peNode);
-//             stack.push(peNode);  
-//             return false;   
-//     }
-//     public void endVisit(Clinit clinit, ClassScope scope) {
-//             stack.pop();
-//     }
-
-       /** This method works-around an odd traverse implementation on Initializer
-        */
-       private Initializer inInitializer = null;
-       public boolean visit(Initializer initializer, MethodScope scope) {
-               if (initializer == inInitializer) return false;
-               inInitializer = initializer;
-               
-               ProgramElementNode peNode = new ProgramElementNode(
-                       "...",
-                       ProgramElementNode.Kind.INITIALIZER,    
-                       makeLocation(initializer),
-                       initializer.modifiers,
-                       "",
-                       new ArrayList());       
-               ((StructureNode)stack.peek()).addChild(peNode);
-               stack.push(peNode);
-               initializer.block.traverse(this, scope);
-               stack.pop();
-               return false;   
-       }
-
-       // ??? handle non-existant files
-       private ISourceLocation makeLocation(AstNode node) {            
-               String fileName = "";
-               if (currCompilationResult.getFileName() != null) {
-                       fileName = new String(currCompilationResult.getFileName());
-               }
-               // AMC - different strategies based on node kind
-               int startLine = getStartLine(node);
-               int endLine = getEndLine(node);
-               ISourceLocation loc = null;
-               if ( startLine <= endLine ) {
-                       // found a valid end line for this node...
-                       loc = new SourceLocation(new File(fileName), startLine, endLine);                       
-               } else {
-                       loc = new SourceLocation(new File(fileName), startLine);
-               }
-               return loc;
-       }
-  
-
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getStartLine( AstNode n){
-//             if (  n instanceof AbstractVariableDeclaration ) return getStartLine( (AbstractVariableDeclaration)n);
-//             if (  n instanceof AbstractMethodDeclaration ) return getStartLine( (AbstractMethodDeclaration)n);
-//             if (  n instanceof TypeDeclaration ) return getStartLine( (TypeDeclaration)n);
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       n.sourceStart);         
-       }
-       
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getEndLine( AstNode n){
-               if (  n instanceof AbstractVariableDeclaration ) return getEndLine( (AbstractVariableDeclaration)n);
-               if (  n instanceof AbstractMethodDeclaration ) return getEndLine( (AbstractMethodDeclaration)n);
-               if (  n instanceof TypeDeclaration ) return getEndLine( (TypeDeclaration)n);    
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       n.sourceEnd);
-       }
-       
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getStartLine( AbstractVariableDeclaration avd ) {
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       avd.declarationSourceStart);
-       }
-       
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getEndLine( AbstractVariableDeclaration avd ){
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       avd.declarationSourceEnd);              
-       }
-       
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getStartLine( AbstractMethodDeclaration amd ){
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       amd.declarationSourceStart);
-       }
-       
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getEndLine( AbstractMethodDeclaration amd) {
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       amd.declarationSourceEnd);
-       }
-       
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getStartLine( TypeDeclaration td ){
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       td.declarationSourceStart);
-       }
-       
-       // AMC - overloaded set of methods to get start and end lines for
-       // various ASTNode types. They have no common ancestor in the
-       // hierarchy!!
-       private int getEndLine( TypeDeclaration td){
-               return ProblemHandler.searchLineNumber(
-                       currCompilationResult.lineSeparatorPositions,
-                       td.declarationSourceEnd);
-       }
-}
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmHierarchyBuilder.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmHierarchyBuilder.java
new file mode 100644 (file)
index 0000000..1cdc998
--- /dev/null
@@ -0,0 +1,500 @@
+/* *******************************************************************
+ * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Common Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/cpl-v10.html 
+ *  
+ * Contributors: 
+ *     PARC     initial implementation 
+ * ******************************************************************/
+
+
+package org.aspectj.ajdt.internal.core.builder;
+
+import java.io.*;
+import java.util.*;
+
+import org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration;
+import org.aspectj.ajdt.internal.compiler.lookup.EclipseFactory;
+import org.aspectj.asm.*;
+import org.aspectj.asm.internal.ProgramElement;
+import org.aspectj.bridge.*;
+import org.aspectj.util.LangUtil;
+import org.aspectj.weaver.Member;
+import org.eclipse.jdt.internal.compiler.*;
+import org.eclipse.jdt.internal.compiler.ast.*;
+import org.eclipse.jdt.internal.compiler.lookup.*;
+import org.eclipse.jdt.internal.compiler.problem.ProblemHandler;
+
+public class AsmHierarchyBuilder extends AbstractSyntaxTreeVisitorAdapter {
+       
+    public static void build(    
+        CompilationUnitDeclaration unit,
+        StructureModel structureModel) {
+        LangUtil.throwIaxIfNull(unit, "unit");
+        new AsmHierarchyBuilder(unit.compilationResult()).internalBuild(unit, structureModel);
+    }
+
+       private final Stack stack;
+       private final CompilationResult currCompilationResult;
+       private AsmNodeFormatter formatter = new AsmNodeFormatter();
+       
+    protected AsmHierarchyBuilder(CompilationResult result) {
+        LangUtil.throwIaxIfNull(result, "result");
+        currCompilationResult = result;
+        stack = new Stack();
+    }
+          
+    /** 
+     * Called only by 
+     * build(CompilationUnitDeclaration unit, StructureModel structureModel) 
+     */
+    private void internalBuild(
+        CompilationUnitDeclaration unit, 
+        StructureModel structureModel) {
+        LangUtil.throwIaxIfNull(structureModel, "structureModel");        
+        if (!currCompilationResult.equals(unit.compilationResult())) {
+            throw new IllegalArgumentException("invalid unit: " + unit);
+        }
+        // ---- summary
+        // add unit to package (or root if no package),
+        // first removing any duplicate (XXX? removes children if 3 classes in same file?)
+        // push the node on the stack
+        // and traverse
+        
+        // -- create node to add
+        final File file = new File(new String(unit.getFileName()));
+        final IProgramElement cuNode;
+        {
+            // AMC - use the source start and end from the compilation unit decl
+            int startLine = getStartLine(unit);
+            int endLine = getEndLine(unit);     
+            ISourceLocation sourceLocation 
+                = new SourceLocation(file, startLine, endLine);
+            cuNode = new ProgramElement(
+                new String(file.getName()),
+                IProgramElement.Kind.FILE_JAVA,
+                sourceLocation,
+                0,
+                "",
+                new ArrayList());
+        }
+
+        final IProgramElement addToNode = genAddToNode(unit, structureModel);
+        
+        // -- remove duplicates before adding (XXX use them instead?)
+        for (ListIterator itt = addToNode.getChildren().listIterator(); itt.hasNext(); ) {
+            IProgramElement child = (IProgramElement)itt.next();
+            ISourceLocation childLoc = child.getSourceLocation();
+            if (null == childLoc) {
+                // XXX ok, packages have null source locations
+                // signal others?
+            } else if (childLoc.getSourceFile().equals(file)) {
+                itt.remove();
+            }
+        }
+        // -- add and traverse
+        addToNode.addChild(cuNode);     
+        stack.push(cuNode);
+        unit.traverse(this, unit.scope);  
+        
+        // -- update file map (XXX do this before traversal?)
+        try {
+            structureModel.addToFileMap(file.getCanonicalPath(), cuNode);
+        } catch (IOException e) { 
+            System.err.println("IOException " + e.getMessage() 
+                + " creating path for " + file );
+            // XXX signal IOException when canonicalizing file path
+        }
+        
+       }
+
+       /**
+        * Get/create teh node (package or root) to add to.
+        */
+       private IProgramElement genAddToNode(
+               CompilationUnitDeclaration unit,
+               StructureModel structureModel) {
+               final IProgramElement addToNode;
+               {
+                   ImportReference currentPackage = unit.currentPackage;
+                   if (null == currentPackage) {
+                       addToNode = structureModel.getRoot();
+                   } else {
+                       String pkgName;
+                       {
+                           StringBuffer nameBuffer = new StringBuffer();
+                           final char[][] importName = currentPackage.getImportName();
+                           final int last = importName.length-1;
+                           for (int i = 0; i < importName.length; i++) {
+                               nameBuffer.append(new String(importName[i]));
+                               if (i < last) {
+                                   nameBuffer.append('.');
+                               } 
+                           }
+                           pkgName = nameBuffer.toString();
+                       }
+                   
+                       IProgramElement pkgNode = null;
+                       for (Iterator it = structureModel.getRoot().getChildren().iterator(); 
+                           it.hasNext(); ) {
+                           IProgramElement currNode = (IProgramElement)it.next();
+                           if (pkgName.equals(currNode.getName())) {
+                               pkgNode = currNode;
+                               break; 
+                           } 
+                       }
+                       if (pkgNode == null) {
+                           // note packages themselves have no source location
+                           pkgNode = new ProgramElement(
+                               pkgName, 
+                               IProgramElement.Kind.PACKAGE, 
+                               new ArrayList()
+                           );
+                           structureModel.getRoot().addChild(pkgNode);
+                       }
+                       addToNode = pkgNode;
+                   }
+               }
+               return addToNode;
+       }
+
+       public boolean visit(TypeDeclaration typeDeclaration, CompilationUnitScope scope) {
+               String name = new String(typeDeclaration.name);
+               IProgramElement.Kind kind = IProgramElement.Kind.CLASS;
+               if (typeDeclaration instanceof AspectDeclaration) kind = IProgramElement.Kind.ASPECT;
+               else if (typeDeclaration.isInterface()) kind = IProgramElement.Kind.INTERFACE;
+
+               IProgramElement peNode = new ProgramElement(
+                       name,
+                       kind,
+                       makeLocation(typeDeclaration),
+                       typeDeclaration.modifiers,                      "",
+                       new ArrayList());
+               
+//             peNode.setFullSignature(typeDeclaration.());
+               
+               ((IProgramElement)stack.peek()).addChild(peNode);
+               stack.push(peNode);
+               return true;
+       }
+       public void endVisit(TypeDeclaration typeDeclaration, CompilationUnitScope scope) {
+               stack.pop();
+       }
+       
+       // ??? share impl with visit(TypeDeclaration, ..) ?
+       public boolean visit(MemberTypeDeclaration memberTypeDeclaration, ClassScope scope) {
+               String name = new String(memberTypeDeclaration.name);
+               //System.err.println("member type with name: " + name);
+               
+               IProgramElement.Kind kind = IProgramElement.Kind.CLASS;
+               if (memberTypeDeclaration instanceof AspectDeclaration) kind = IProgramElement.Kind.ASPECT;
+               else if (memberTypeDeclaration.isInterface()) kind = IProgramElement.Kind.INTERFACE;
+
+               IProgramElement peNode = new ProgramElement(
+                       name,
+                       kind,
+                       makeLocation(memberTypeDeclaration),
+                       memberTypeDeclaration.modifiers,
+                       "",
+                       new ArrayList());
+               
+               peNode.setFullSignature(memberTypeDeclaration.toString());
+               
+               ((IProgramElement)stack.peek()).addChild(peNode);
+               stack.push(peNode);
+               return true;
+       }
+       public void endVisit(MemberTypeDeclaration memberTypeDeclaration, ClassScope scope) {
+               stack.pop();
+       }
+       
+       public boolean visit(LocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
+               String name = new String(memberTypeDeclaration.name);
+               
+               String fullName = "<undefined>";
+               if (memberTypeDeclaration.binding != null
+                       && memberTypeDeclaration.binding.constantPoolName() != null) {
+                       fullName = new String(memberTypeDeclaration.binding.constantPoolName());
+               }
+                
+               int dollar = fullName.indexOf('$');
+               fullName = fullName.substring(dollar+1);
+//             
+//             System.err.println("member type with name: " + name + ", " + 
+//                             new String(fullName));
+               
+               IProgramElement.Kind kind = IProgramElement.Kind.CLASS;
+               if (memberTypeDeclaration.isInterface()) kind = IProgramElement.Kind.INTERFACE;
+
+               IProgramElement peNode = new ProgramElement(
+                       fullName,
+                       kind,
+                       makeLocation(memberTypeDeclaration),
+                       memberTypeDeclaration.modifiers,
+                       "",
+                       new ArrayList());
+               
+               //??? we add this to the compilation unit
+               findEnclosingClass(stack).addChild(peNode);
+               stack.push(peNode);
+               return true;
+       }
+       public void endVisit(LocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
+               stack.pop();
+       }
+       
+       public boolean visit(AnonymousLocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
+               return visit((LocalTypeDeclaration)memberTypeDeclaration, scope);
+       }
+
+       public void endVisit(AnonymousLocalTypeDeclaration memberTypeDeclaration, BlockScope scope) {
+               stack.pop();
+       }
+       
+       private IProgramElement findEnclosingClass(Stack stack) {
+               for (int i = stack.size()-1; i >= 0; i--) {
+                       IProgramElement pe = (IProgramElement)stack.get(i);
+                       if (pe.getKind() == IProgramElement.Kind.CLASS) {
+                               return pe;
+                       }
+                       
+               }
+               return (IProgramElement)stack.peek();
+       }       
+       
+       public boolean visit(MethodDeclaration methodDeclaration, ClassScope scope) {           
+               IProgramElement peNode = new ProgramElement(
+                       "",
+                       IProgramElement.Kind.ERROR,
+                       makeLocation(methodDeclaration),
+                       methodDeclaration.modifiers,
+                       "",
+                       new ArrayList());
+
+               formatter.genLabelAndKind(methodDeclaration, peNode);
+               genBytecodeInfo(methodDeclaration, peNode);
+
+               // TODO: should improve determining what the main method is
+               if (peNode.getKind().equals(IProgramElement.Kind.METHOD)) {
+                       if (peNode.getName().equals("main")) {
+                               ((IProgramElement)stack.peek()).setRunnable(true);
+                       }       
+               }
+               
+               stack.push(peNode);
+               return true;
+       }
+
+       private void genBytecodeInfo(MethodDeclaration methodDeclaration, IProgramElement peNode) {
+               if (methodDeclaration.binding != null) {
+                       String memberName = "";
+                       String memberBytecodeSignature = "";
+                       try {
+                               Member member = EclipseFactory.makeResolvedMember(methodDeclaration.binding);
+                               memberName = member.getName();
+                               memberBytecodeSignature = member.getSignature();
+                       } catch (NullPointerException npe) {
+                               memberName = "<undefined>";
+                       }
+               
+                       peNode.setBytecodeName(memberName);
+                       peNode.setBytecodeSignature(memberBytecodeSignature);
+               }
+               ((IProgramElement)stack.peek()).addChild(peNode);
+       }
+
+       public void endVisit(MethodDeclaration methodDeclaration, ClassScope scope) {
+               stack.pop();
+       }
+
+       public boolean visit(FieldDeclaration fieldDeclaration, MethodScope scope) {            
+               IProgramElement peNode = new ProgramElement(
+                       new String(fieldDeclaration.name),
+                       IProgramElement.Kind.FIELD,     
+                       makeLocation(fieldDeclaration),
+                       fieldDeclaration.modifiers,
+                       "",
+                       new ArrayList());       
+               ((IProgramElement)stack.peek()).addChild(peNode);
+               stack.push(peNode);
+               return true;            
+       }
+       public void endVisit(FieldDeclaration fieldDeclaration, MethodScope scope) {
+               stack.pop();
+       }
+
+
+//     public boolean visit(ImportReference importRef, CompilationUnitScope scope) {
+//             ProgramElementNode peNode = new ProgramElementNode(
+//                     new String(importRef.toString()),
+//                     ProgramElementNode.Kind.,       
+//                     makeLocation(importRef),
+//                     0,
+//                     "",
+//                     new ArrayList());       
+//             ((IProgramElement)stack.peek()).addChild(0, peNode);
+//             stack.push(peNode);
+//             return true;    
+//     }
+//     public void endVisit(ImportReference importRef,CompilationUnitScope scope) {
+//             stack.pop();            
+//     }
+
+       public boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope scope) {
+               if (constructorDeclaration.isDefaultConstructor) {
+                       stack.push(null); // a little wierd but does the job
+                       return true;    
+               }
+               IProgramElement peNode = new ProgramElement(
+                       new String(constructorDeclaration.selector),
+                       IProgramElement.Kind.CONSTRUCTOR,       
+                       makeLocation(constructorDeclaration),
+                       constructorDeclaration.modifiers,
+                       "",
+                       new ArrayList());       
+               ((IProgramElement)stack.peek()).addChild(peNode);
+               stack.push(peNode);
+               return true;    
+       }
+       public void endVisit(ConstructorDeclaration constructorDeclaration, ClassScope scope) {
+               stack.pop();
+       }
+
+//     public boolean visit(Clinit clinit, ClassScope scope) {
+//             ProgramElementNode peNode = new ProgramElementNode(
+//                     "<clinit>",
+//                     ProgramElementNode.Kind.INITIALIZER,    
+//                     makeLocation(clinit),
+//                     clinit.modifiers,
+//                     "",
+//                     new ArrayList());       
+//             ((IProgramElement)stack.peek()).addChild(peNode);
+//             stack.push(peNode);  
+//             return false;   
+//     }
+//     public void endVisit(Clinit clinit, ClassScope scope) {
+//             stack.pop();
+//     }
+
+       /** This method works-around an odd traverse implementation on Initializer
+        */
+       private Initializer inInitializer = null;
+       public boolean visit(Initializer initializer, MethodScope scope) {
+               if (initializer == inInitializer) return false;
+               inInitializer = initializer;
+               
+               IProgramElement peNode = new ProgramElement(
+                       "...",
+                       IProgramElement.Kind.INITIALIZER,       
+                       makeLocation(initializer),
+                       initializer.modifiers,
+                       "",
+                       new ArrayList());       
+               ((IProgramElement)stack.peek()).addChild(peNode);
+               stack.push(peNode);
+               initializer.block.traverse(this, scope);
+               stack.pop();
+               return false;   
+       }
+
+       // ??? handle non-existant files
+       private ISourceLocation makeLocation(AstNode node) {            
+               String fileName = "";
+               if (currCompilationResult.getFileName() != null) {
+                       fileName = new String(currCompilationResult.getFileName());
+               }
+               // AMC - different strategies based on node kind
+               int startLine = getStartLine(node);
+               int endLine = getEndLine(node);
+               ISourceLocation loc = null;
+               if ( startLine <= endLine ) {
+                       // found a valid end line for this node...
+                       loc = new SourceLocation(new File(fileName), startLine, endLine);                       
+               } else {
+                       loc = new SourceLocation(new File(fileName), startLine);
+               }
+               return loc;
+       }
+  
+
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getStartLine( AstNode n){
+//             if (  n instanceof AbstractVariableDeclaration ) return getStartLine( (AbstractVariableDeclaration)n);
+//             if (  n instanceof AbstractMethodDeclaration ) return getStartLine( (AbstractMethodDeclaration)n);
+//             if (  n instanceof TypeDeclaration ) return getStartLine( (TypeDeclaration)n);
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       n.sourceStart);         
+       }
+       
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getEndLine( AstNode n){
+               if (  n instanceof AbstractVariableDeclaration ) return getEndLine( (AbstractVariableDeclaration)n);
+               if (  n instanceof AbstractMethodDeclaration ) return getEndLine( (AbstractMethodDeclaration)n);
+               if (  n instanceof TypeDeclaration ) return getEndLine( (TypeDeclaration)n);    
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       n.sourceEnd);
+       }
+       
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getStartLine( AbstractVariableDeclaration avd ) {
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       avd.declarationSourceStart);
+       }
+       
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getEndLine( AbstractVariableDeclaration avd ){
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       avd.declarationSourceEnd);              
+       }
+       
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getStartLine( AbstractMethodDeclaration amd ){
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       amd.declarationSourceStart);
+       }
+       
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getEndLine( AbstractMethodDeclaration amd) {
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       amd.declarationSourceEnd);
+       }
+       
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getStartLine( TypeDeclaration td ){
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       td.declarationSourceStart);
+       }
+       
+       // AMC - overloaded set of methods to get start and end lines for
+       // various ASTNode types. They have no common ancestor in the
+       // hierarchy!!
+       private int getEndLine( TypeDeclaration td){
+               return ProblemHandler.searchLineNumber(
+                       currCompilationResult.lineSeparatorPositions,
+                       td.declarationSourceEnd);
+       }
+}
index b7425d426f0c57cdc140e4db2580ab6e93832b3a..e2025743e19cc33313fbaf51d821b7fb09dad970 100644 (file)
@@ -13,7 +13,7 @@ package org.aspectj.ajdt.internal.core.builder;
 import java.util.Iterator;
 
 import org.aspectj.ajdt.internal.compiler.ast.*;
-import org.aspectj.asm.ProgramElementNode;
+import org.aspectj.asm.IProgramElement;
 import org.aspectj.weaver.*;
 import org.aspectj.weaver.patterns.*;
 import org.eclipse.jdt.internal.compiler.ast.*;
@@ -31,10 +31,10 @@ public class AsmNodeFormatter {
        public static final int MAX_MESSAGE_LENGTH = 18;
        public static final String DEC_LABEL = "declare";
 
-       public void genLabelAndKind(MethodDeclaration methodDeclaration, ProgramElementNode node) {
+       public void genLabelAndKind(MethodDeclaration methodDeclaration, IProgramElement node) {
                if (methodDeclaration instanceof AdviceDeclaration) { 
                        AdviceDeclaration ad = (AdviceDeclaration)methodDeclaration;
-                       node.setKind( ProgramElementNode.Kind.ADVICE);
+                       node.setKind( IProgramElement.Kind.ADVICE);
                        String label = "";
                        label += ad.kind.toString();
                        label += "(" + genArguments(ad) + "): ";
@@ -66,12 +66,12 @@ public class AsmNodeFormatter {
                                }
                        } else {
                                label += POINTCUT_ABSTRACT;
-                       }
+                       } 
                        node.setName(label);
 
                } else if (methodDeclaration instanceof PointcutDeclaration) { 
                        PointcutDeclaration pd = (PointcutDeclaration)methodDeclaration;
-                       node.setKind( ProgramElementNode.Kind.POINTCUT);
+                       node.setKind( IProgramElement.Kind.POINTCUT);
                        String label = translatePointcutName(new String(methodDeclaration.selector));
                        label += "(" + genArguments(pd) + ")";
                        node.setName(label); 
@@ -83,29 +83,29 @@ public class AsmNodeFormatter {
                                DeclareErrorOrWarning deow = (DeclareErrorOrWarning)declare.declare;
                                
                                if (deow.isError()) {
-                                       node.setKind( ProgramElementNode.Kind.DECLARE_ERROR);
+                                       node.setKind( IProgramElement.Kind.DECLARE_ERROR);
                                        label += DECLARE_ERROR;
                                } else {
-                                       node.setKind( ProgramElementNode.Kind.DECLARE_WARNING);
+                                       node.setKind( IProgramElement.Kind.DECLARE_WARNING);
                                        label += DECLARE_WARNING;
                                }
                                node.setName(label + "\"" + genDeclareMessage(deow.getMessage()) + "\"") ;
                                 
                        } else if (declare.declare instanceof DeclareParents) {
-                               node.setKind( ProgramElementNode.Kind.DECLARE_PARENTS);
+                               node.setKind( IProgramElement.Kind.DECLARE_PARENTS);
                                DeclareParents dp = (DeclareParents)declare.declare;
                                node.setName(label + DECLARE_PARENTS + genTypePatternLabel(dp.getChild()));     
                                
                        } else if (declare.declare instanceof DeclareSoft) {
-                               node.setKind( ProgramElementNode.Kind.DECLARE_SOFT);
+                               node.setKind( IProgramElement.Kind.DECLARE_SOFT);
                                DeclareSoft ds = (DeclareSoft)declare.declare;
                                node.setName(label + DECLARE_SOFT + genTypePatternLabel(ds.getException()));
                        } else if (declare.declare instanceof DeclarePrecedence) {
-                               node.setKind( ProgramElementNode.Kind.DECLARE_PRECEDENCE);
+                               node.setKind( IProgramElement.Kind.DECLARE_PRECEDENCE);
                                DeclarePrecedence ds = (DeclarePrecedence)declare.declare;
                                node.setName(label + DECLARE_PRECEDENCE + genPrecedenceListLabel(ds.getPatterns()));
                        } else {
-                               node.setKind( ProgramElementNode.Kind.ERROR);
+                               node.setKind( IProgramElement.Kind.ERROR);
                                node.setName(DECLARE_UNKNONWN);
                        }
                        
@@ -113,23 +113,29 @@ public class AsmNodeFormatter {
                        InterTypeDeclaration itd = (InterTypeDeclaration)methodDeclaration;
                        String label = itd.onType.toString() + "." + new String(itd.getDeclaredSelector()); 
                        if (methodDeclaration instanceof InterTypeFieldDeclaration) {
-                               node.setKind(ProgramElementNode.Kind.INTER_TYPE_FIELD);                         
+                               node.setKind(IProgramElement.Kind.INTER_TYPE_FIELD);                            
                        } else if (methodDeclaration instanceof InterTypeMethodDeclaration) {
-                               node.setKind(ProgramElementNode.Kind.INTER_TYPE_METHOD);
+                               node.setKind(IProgramElement.Kind.INTER_TYPE_METHOD);
                                InterTypeMethodDeclaration itmd = (InterTypeMethodDeclaration)methodDeclaration;                        
                                label += "(" + genArguments(itd) + ")";
                        } else if (methodDeclaration instanceof InterTypeConstructorDeclaration) {
-                               node.setKind(ProgramElementNode.Kind.INTER_TYPE_CONSTRUCTOR);
+                               node.setKind(IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR);
                                InterTypeConstructorDeclaration itcd = (InterTypeConstructorDeclaration)methodDeclaration;                              
                        } else {
-                               node.setKind(ProgramElementNode.Kind.ERROR);
+                               node.setKind(IProgramElement.Kind.ERROR);
                        }
                        node.setName(label);
                        node.setReturnType(itd.returnType.toString());
                        
                } else {
-                       node.setKind(ProgramElementNode.Kind.METHOD);
-                       node.setName(new String(methodDeclaration.selector));   
+                       if (methodDeclaration.isConstructor()) {
+                               node.setKind(IProgramElement.Kind.CONSTRUCTOR);
+                       } else {
+                               node.setKind(IProgramElement.Kind.METHOD);
+                       } 
+                       String label = new String(methodDeclaration.selector);
+                       label += "(" + genArguments(methodDeclaration) + ")";
+                       node.setName(label); 
                }
        }
 
index 8f662e160b9a3b089ca4320ec5ffa13dcc9ea09f..74a394da4b95ad914eb84d7650ee6e4915aa75a4 100644 (file)
 
 package org.aspectj.ajdt.internal.core.builder;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.aspectj.asm.AdviceAssociation;
-import org.aspectj.asm.IntroductionAssociation;
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.RelationNode;
-import org.aspectj.asm.StructureModelManager;
+import java.io.*;
+import java.util.*;
+
+import org.aspectj.asm.*;
 //import org.aspectj.ajde.compiler.AjdeCompiler;
 
 /** 
@@ -48,7 +38,7 @@ public class EmacsStructureModelManager {
             //Set fileSet = StructureModelManager.INSTANCE.getStructureModel().getFileMap().entrySet(); 
                        Set fileSet = StructureModelManager.getDefault().getStructureModel().getFileMapEntrySet(); 
             for (Iterator it = fileSet.iterator(); it.hasNext(); ) {
-                ProgramElementNode peNode = (ProgramElementNode)((Map.Entry)it.next()).getValue();
+                IProgramElement peNode = (IProgramElement)((Map.Entry)it.next()).getValue();
                 dumpStructureToFile(peNode);
             }
         } catch (IOException ioe) {
@@ -64,10 +54,10 @@ public class EmacsStructureModelManager {
 //        writer.flush();
 //    }
 
-    private void dumpStructureToFile(ProgramElementNode node) throws IOException {
-        String s = node.getKind();
-        if (!  (s.equals(ProgramElementNode.Kind.FILE_ASPECTJ.toString())
-                || s.equals(ProgramElementNode.Kind.FILE_JAVA.toString()))) {
+    private void dumpStructureToFile(IProgramElement node) throws IOException {
+        String s = node.getKind().toString();
+        if (!  (s.equals(IProgramElement.Kind.FILE_ASPECTJ.toString())
+                || s.equals(IProgramElement.Kind.FILE_JAVA.toString()))) {
             throw new IllegalArgumentException("externalize file, not " + node);
         }
         // source files have source locations
@@ -98,43 +88,46 @@ public class EmacsStructureModelManager {
             this.writer = writer;
         }
 
-        private void printDecls(ProgramElementNode node) {
+        private void printDecls(IProgramElement node) {
             print("(");
             for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
                 // this ignores relations on the compile unit
                 Object nodeObject = it.next();
-                if (nodeObject instanceof ProgramElementNode) {
-                    ProgramElementNode child = (ProgramElementNode)nodeObject;
+//                             throw new RuntimeException("unimplemented");
+//                if (nodeObject instanceof IProgramElement) {
+                    IProgramElement child = (IProgramElement)nodeObject;
                     printDecl(child, true);
-                } else if (nodeObject instanceof LinkNode) {
-                    LinkNode child = (LinkNode)nodeObject;
-                    printDecl(child.getProgramElementNode(), false);
-                }
+//                } 
+//                else if (nodeObject instanceof LinkNode) {
+//                    LinkNode child = (LinkNode)nodeObject;
+//                    printDecl(child.getProgramElementNode(), false);
+//                }
             }
             print(") ");
         }
 
-        private void printDecls(RelationNode node) {
-            for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) {
+        private void printDecls(IRelationship node) {
+            for (Iterator it = node.getTargets().iterator(); it.hasNext(); ) {
                 // this ignores relations on the compile unit
                 Object nodeObject = it.next();
-                if (nodeObject instanceof LinkNode) {
-                    LinkNode child = (LinkNode)nodeObject;
-                    if (//!child.getProgramElementNode().getKind().equals("stmnt") &&
-                        !child.getProgramElementNode().getKind().equals("<undefined>")) {
-                        printDecl(child.getProgramElementNode(), false);
+                throw new RuntimeException("unimplemented");
+//                if (nodeObject instanceof LinkNode) {
+//                    LinkNode child = (LinkNode)nodeObject;
+//                    if (//!child.getProgramElementNode().getKind().equals("stmnt") &&
+//                        !child.getProgramElementNode().getKind().equals("<undefined>")) {
 //                        printDecl(child.getProgramElementNode(), false);
-                    }
-                }
+////                        printDecl(child.getProgramElementNode(), false);
+//                    }
+//                }
             }
         }
 
         /**
          * @param   structureNode   can be a ProgramElementNode or a LinkNode
          */
-        private void printDecl(ProgramElementNode node, boolean recurse) {
+        private void printDecl(IProgramElement node, boolean recurse) {
                if (node == null || node.getSourceLocation() == null) return;
-            String kind = node.getKind().toLowerCase();
+            String kind = node.getKind().toString().toLowerCase();
             print("(");
             print("(" + node.getSourceLocation().getLine() + " . " + node.getSourceLocation().getColumn() + ") ");
             print("(" + node.getSourceLocation().getLine() + " . " + node.getSourceLocation().getColumn() + ") ");
@@ -161,13 +154,13 @@ public class EmacsStructureModelManager {
                 print("nil");
             } else {
                 print("(");
-                if (node instanceof ProgramElementNode) {
-                    java.util.List relations = ((ProgramElementNode)node).getRelations();
+                if (node instanceof IProgramElement) {
+                    java.util.List relations = ((IProgramElement)node).getRelations();
                     if (relations != null) {
                         for (Iterator it = relations.iterator(); it.hasNext(); ) {
-                            RelationNode relNode = (RelationNode)it.next();
-                            if (relNode.getRelation().getAssociationName().equals(AdviceAssociation.NAME) ||
-                                relNode.getRelation().getAssociationName().equals(IntroductionAssociation.NAME)) {
+                                                       IRelationship relNode = (IRelationship)it.next();
+                            if (relNode.getKind() == IRelationship.Kind.ADVICE ||
+                                                               relNode.getKind() == IRelationship.Kind.DECLARE) {
                                 printDecls(relNode);                                   // 6
                             }
                         }
@@ -182,8 +175,8 @@ public class EmacsStructureModelManager {
                     while (it3.hasNext()) {
                         // this ignores relations on the compile unit
                         Object nodeObject = it3.next();
-                        if (nodeObject instanceof ProgramElementNode) {
-                            ProgramElementNode currNode = (ProgramElementNode)nodeObject;
+                        if (nodeObject instanceof IProgramElement) {
+                            IProgramElement currNode = (IProgramElement)nodeObject;
                             if (//!currNode.isStmntKind() &&
                                 !currNode.getKind().equals("<undefined>")) {
                                 printDecl(currNode, true);
index 759dbcb82adf2c7cbabe61cdd49fea0153fd47c4..983f69f968d49f0d32a8dd798eeeaa9e911ab3c2 100644 (file)
@@ -60,7 +60,7 @@ public class AsmBuilderTest extends TestCase {
                BlockScope scope = null;
                
                try { 
-                       new AsmBuilder(new CompilationResult(cu, 0, 0, 0)).visit(local, scope);
+                       new AsmHierarchyBuilder(new CompilationResult(cu, 0, 0, 0)).visit(local, scope);
                } catch (Exception e) {
                        assertTrue(e instanceof EmptyStackException);
                }
index fa8fb7d995ca573d7ba12b3f0183d835284f4666..02da4ab43bb6af011f14a02a1d6ef28914b0c266 100644 (file)
@@ -16,15 +16,14 @@ import java.awt.Frame;
 import java.io.*;
 import java.lang.reflect.*;
 import java.util.*;
-import java.util.List;
 
 import org.aspectj.ajde.*;
 import org.aspectj.ajde.ui.*;
 import org.aspectj.ajde.ui.internal.*;
 import org.aspectj.ajde.ui.swing.*;
-import org.aspectj.asm.StructureNode;
+import org.aspectj.asm.*;
+import org.aspectj.asm.IProgramElement;
 import org.aspectj.bridge.*;
-import org.aspectj.util.*;
 import org.aspectj.util.FileUtil;
 
 /**
@@ -147,12 +146,17 @@ public class CompileCommand implements ICommand {
         };
         StructureViewNodeFactory structureViewNodeFactory =
             new StructureViewNodeFactory(iconRegistry) {
-            protected StructureViewNode createConcreteNode(
-                StructureNode node,
-                AbstractIcon icon,
-                List children) {
-                return new SwingTreeViewNode(node, icon, children);
-            }
+                   protected StructureViewNode createConcreteNode(
+                       IProgramElement node,
+                       AbstractIcon icon,
+                       List children) {
+                       return new SwingTreeViewNode(node, icon, children);
+                   }
+                               protected StructureViewNode createConcreteNode(
+                                       IRelationship node,
+                                       AbstractIcon icon) {
+                                       return new SwingTreeViewNode(node, icon);
+                               }                   
         };
 
         Ajde.init(
index 15e94274ecebaa5ab568c7fe11b6e8a345181fb2..8b557cf339b63ba0264cd951dd63f108c9fcc63b 100644 (file)
 
 package org.aspectj.weaver;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.aspectj.asm.AdviceAssociation;
-import org.aspectj.asm.LinkNode;
-import org.aspectj.asm.ProgramElementNode;
-import org.aspectj.asm.Relation;
-import org.aspectj.asm.RelationNode;
-import org.aspectj.asm.StructureModel;
-import org.aspectj.bridge.ISourceLocation;
-import org.aspectj.bridge.SourceLocation;
+import java.util.*;
+
+import org.aspectj.asm.*;
+import org.aspectj.asm.internal.*;
+import org.aspectj.bridge.*;
 
 public class AsmAdaptor {
        public static void noteMunger(StructureModel model, Shadow shadow, ShadowMunger munger) {
@@ -35,89 +29,89 @@ public class AsmAdaptor {
                        }
 
 //                     System.out.println("--------------------------");
-                       ProgramElementNode targetNode = getNode(model, shadow);
-                       ProgramElementNode adviceNode = getNode(model, a);  
-                       
-                       Relation relation;
-                       if (shadow.getKind().equals(Shadow.FieldGet) || shadow.getKind().equals(Shadow.FieldSet)) {
-                               relation = AdviceAssociation.FIELD_ACCESS_RELATION;
-                       } else if (shadow.getKind().equals(Shadow.Initialization) || shadow.getKind().equals(Shadow.StaticInitialization)) {
-                               relation = AdviceAssociation.INITIALIZER_RELATION;
-                       } else if (shadow.getKind().equals(Shadow.ExceptionHandler)) {
-                               relation = AdviceAssociation.HANDLER_RELATION;
-                       } else if (shadow.getKind().equals(Shadow.MethodCall)) {
-                               relation = AdviceAssociation.METHOD_CALL_SITE_RELATION;
-                       } else if (shadow.getKind().equals(Shadow.ConstructorCall)) {
-                               relation = AdviceAssociation.CONSTRUCTOR_CALL_SITE_RELATION;
-                       } else if (shadow.getKind().equals(Shadow.MethodExecution) || shadow.getKind().equals(Shadow.AdviceExecution)) {
-                               relation = AdviceAssociation.METHOD_RELATION;
-                       } else if (shadow.getKind().equals(Shadow.ConstructorExecution)) {
-                               relation = AdviceAssociation.CONSTRUCTOR_RELATION;
-                       } else if (shadow.getKind().equals(Shadow.PreInitialization)) {
-                               // TODO: someone should check that this behaves reasonably in the IDEs
-                               relation = AdviceAssociation.INITIALIZER_RELATION;
-                       } else {
-                               System.err.println("> unmatched relation: " + shadow.getKind());
-                               relation = AdviceAssociation.METHOD_RELATION;
-                       }
+                       IProgramElement targetNode = getNode(model, shadow);
+                       IProgramElement adviceNode = getNode(model, a);  
                        
+//                     throw new RuntimeException("unimplemented");
+                       IRelationship relation = null;
+//                     if (shadow.getKind().equals(Shadow.FieldGet) || shadow.getKind().equals(Shadow.FieldSet)) {
+//                             relation = AdviceAssociation.FIELD_ACCESS_RELATION;
+//                     } else if (shadow.getKind().equals(Shadow.Initialization) || shadow.getKind().equals(Shadow.StaticInitialization)) {
+//                             relation = AdviceAssociation.INITIALIZER_RELATION;
+//                     } else if (shadow.getKind().equals(Shadow.ExceptionHandler)) {
+//                             relation = AdviceAssociation.HANDLER_RELATION;
+//                     } else if (shadow.getKind().equals(Shadow.MethodCall)) {
+//                             relation = AdviceAssociation.METHOD_CALL_SITE_RELATION;
+//                     } else if (shadow.getKind().equals(Shadow.ConstructorCall)) {
+//                             relation = AdviceAssociation.CONSTRUCTOR_CALL_SITE_RELATION;
+//                     } else if (shadow.getKind().equals(Shadow.MethodExecution) || shadow.getKind().equals(Shadow.AdviceExecution)) {
+//                             relation = AdviceAssociation.METHOD_RELATION;
+//                     } else if (shadow.getKind().equals(Shadow.ConstructorExecution)) {
+//                             relation = AdviceAssociation.CONSTRUCTOR_RELATION;
+//                     } else if (shadow.getKind().equals(Shadow.PreInitialization)) {
+//                             // TODO: someone should check that this behaves reasonably in the IDEs
+//                             relation = AdviceAssociation.INITIALIZER_RELATION;
+//                     } else {
+//                             System.err.println("> unmatched relation: " + shadow.getKind());
+//                             relation = AdviceAssociation.METHOD_RELATION;
+//                     }
+//                     
 //                     System.out.println("> target: " + targetNode + ", advice: " + adviceNode);
                        createAppropriateLinks(targetNode, adviceNode, relation);
                }
        }
 
        private static void createAppropriateLinks(
-               ProgramElementNode target,
-               ProgramElementNode advice,
-               Relation relation)
+               IProgramElement target,
+               IProgramElement advice,
+               IRelationship relation)
        {
                if (target == null || advice == null) return;
                
                
-               addLink(target, new LinkNode(advice),  relation, true);
-               addLink(advice, new LinkNode(target),  relation, false);
-               
-//             System.out.println(">> added target: " + target.getProgramElementKind() + ", advice: " + advice);
-//             System.out.println(">> target: " + target + ", advice: " + target.getSourceLocation());
+//             addLink(target, new LinkNode(advice),  relation, true);
+//             addLink(advice, new LinkNode(target),  relation, false);
        }
 
        private static void addLink(
-               ProgramElementNode onNode,
-               LinkNode linkNode,
-               Relation relation,
+               IProgramElement onNode,
+//             LinkNode linkNode,
+               IRelationship relation,
                boolean isBack)
        {
-               RelationNode node = null;
-               String relationName = isBack ? relation.getBackNavigationName() : relation.getForwardNavigationName();
+               IRelationship node = null;
+               String relationName = relation.getName();
+//             isBack ? relation() : relation.getForwardNavigationName();
                
                //System.err.println("on: " + onNode + " relationName: " + relationName + " existin: " + onNode.getRelations());
                
                for (Iterator i = onNode.getRelations().iterator(); i.hasNext();) {
-                       RelationNode relationNode = (RelationNode) i.next();
+                       IRelationship relationNode = (IRelationship) i.next();
                        if (relationName.equals(relationNode.getName())) {
                                node = relationNode;
                                break;
                        }
                }       
                if (node == null) {
-                       node = new RelationNode(relation,  relationName, new ArrayList());
-                       onNode.getRelations().add(node);
+                       throw new RuntimeException("unimplemented");
+//                     node = new Relationship(relation,  relationName, new ArrayList());
+//                     onNode.getRelations().add(node);
                }
-               node.getChildren().add(linkNode);
+//             node.getTargets().add(linkNode);
                
        }
 
-       private static ProgramElementNode getNode(StructureModel model, Advice a) {
+       private static IProgramElement getNode(StructureModel model, Advice a) {
                //ResolvedTypeX inAspect = a.getConcreteAspect();
                Member member = a.getSignature();
                if (a.getSignature() == null) return null;
                return lookupMember(model, member);
        }
        
-       private static ProgramElementNode getNode(StructureModel model, Shadow shadow) {
+       private static IProgramElement getNode(StructureModel model, Shadow shadow) {
                Member enclosingMember = shadow.getEnclosingCodeSignature();
                
-               ProgramElementNode enclosingNode = lookupMember(model, enclosingMember);
+               IProgramElement enclosingNode = lookupMember(model, enclosingMember);
                if (enclosingNode == null) {
                        Lint.Kind err = shadow.getIWorld().getLint().shadowNotInStructure;
                        if (err.isEnabled()) {
@@ -128,19 +122,19 @@ public class AsmAdaptor {
                
                Member shadowSig = shadow.getSignature();
                if (!shadowSig.equals(enclosingMember)) {
-                       ProgramElementNode bodyNode = findOrCreateBodyNode(enclosingNode, shadowSig, shadow);
+                       IProgramElement bodyNode = findOrCreateBodyNode(enclosingNode, shadowSig, shadow);
                        return bodyNode;
                } else {
                        return enclosingNode;
                }
        }
 
-       private static ProgramElementNode findOrCreateBodyNode(
-               ProgramElementNode enclosingNode,
+       private static IProgramElement findOrCreateBodyNode(
+               IProgramElement enclosingNode,
                Member shadowSig, Shadow shadow)
        {
                for (Iterator it = enclosingNode.getChildren().iterator(); it.hasNext(); ) {
-                       ProgramElementNode node = (ProgramElementNode)it.next();
+                       IProgramElement node = (IProgramElement)it.next();
                        if (shadowSig.getName().equals(node.getBytecodeName()) &&
                                shadowSig.getSignature().equals(node.getBytecodeSignature()))
                        {
@@ -150,9 +144,9 @@ public class AsmAdaptor {
                
                ISourceLocation sl = shadow.getSourceLocation();
                
-               ProgramElementNode peNode = new ProgramElementNode(
+               IProgramElement peNode = new ProgramElement(
                        shadow.toString(),
-                       ProgramElementNode.Kind.CODE,
+                       IProgramElement.Kind.CODE,
 //XXX why not use shadow file? new SourceLocation(sl.getSourceFile(), sl.getLine()),
         new SourceLocation(enclosingNode.getSourceLocation().getSourceFile(), sl.getLine()),
 //                     enclosingNode.getSourceLocation(),
@@ -171,20 +165,20 @@ public class AsmAdaptor {
        
        
        
-       public static ProgramElementNode lookupMember(StructureModel model, Member member) {
+       public static IProgramElement lookupMember(StructureModel model, Member member) {
                TypeX declaringType = member.getDeclaringType();
-               ProgramElementNode classNode =
+               IProgramElement classNode =
                        model.findNodeForClass(declaringType.getPackageName(), declaringType.getClassName());
                return findMemberInClass(classNode, member);
        }
 
-       private static ProgramElementNode findMemberInClass(
-               ProgramElementNode classNode,
+       private static IProgramElement findMemberInClass(
+               IProgramElement classNode,
                Member member)
        {
                if (classNode == null) return null; // XXX remove this check
                for (Iterator it = classNode.getChildren().iterator(); it.hasNext(); ) {
-                       ProgramElementNode node = (ProgramElementNode)it.next();
+                       IProgramElement node = (IProgramElement)it.next();
                        //System.err.println("checking: " + member.getName() + " with " + node.getBytecodeName() + ", " + node.getBytecodeSignature());
                        if (member.getName().equals(node.getBytecodeName()) &&
                                member.getSignature().equals(node.getBytecodeSignature()))