Changeset 25b5d220afcf17776b844086f439554f14dc63dc

Show
Ignore:
Timestamp:
06/28/09 23:36:50 (8 months ago)
Author:
mb0 <mb0@…>
git-author:
mb0 <mb0@mb0.org> / 2009-06-10T20:05:17Z+0200
Parents:
49cbb509af4876ed4a2ccd7942c17372373a5ae2
Children:
364575fc79ca0a2d7d0efbd5c165c1d2dfc36a3b
git-committer:
mb0 <mb0@mb0.org> / 2009-06-28T23:36:50Z+0200
Message:

moved symboltable related code from parser to parse controller
changed diagnose visitors
added indexing visitor. sources are now added to the index0r.
every source folder is added as axroot.
added hyperlinks for source indexes

Files:
2 added
9 modified

Legend:

Unmodified
Added
Removed
  • org.axdt.as3/src/org/axdt/as3/imp/parser/AS3ParseController.java

    r49cbb50 r25b5d22  
    11package org.axdt.as3.imp.parser; 
    22 
    3 import java.util.Stack; 
     3import java.util.HashSet; 
     4import java.util.Iterator; 
     5 
     6import lpg.runtime.IAst; 
     7import lpg.runtime.IToken; 
    48 
    59import org.axdt.as3.AS3Plugin; 
    610import org.axdt.as3.imp.parser.Ast.ASTNode; 
    7 import org.axdt.as3.imp.parser.Ast.Program; 
    811import org.axdt.as3.imp.services.AS3SyntaxProperties; 
    912import org.eclipse.core.runtime.IPath; 
     
    1821import org.eclipse.imp.parser.SimpleLPGParseController; 
    1922import org.eclipse.imp.services.ILanguageSyntaxProperties; 
     23import org.eclipse.jface.text.IRegion; 
    2024 
    2125public class AS3ParseController extends SimpleLPGParseController implements IParseController { 
     
    2731 
    2832        private int lastHash; 
     33 
     34        private IPath location; 
     35 
     36        private SymbolTable topLevelSymbolTable = null; 
    2937 
    3038        public AS3ParseController() { 
     
    7886                AS3Plugin.getDefault().debug("parsing "+ getPath().toString()); 
    7987                lastHash = newHash; 
     88                topLevelSymbolTable = null; 
    8089                PMMonitor my_monitor = new PMMonitor(monitor); 
    8190                char[] contentsArray = contents.toCharArray(); 
     
    8493                        lexer = new AS3Lexer(); 
    8594                } 
    86                 IPath fullpath = fProject.getResource().getLocation().append(fFilePath); 
    87                 lexer.reset(contentsArray, fullpath.toString()); 
     95                location = fProject.getResource().getLocation().append(fFilePath); 
     96                lexer.reset(contentsArray, location.toString()); 
    8897 
    8998                if (parser == null) { 
     
    106115                if (fCurrentAst instanceof ASTNode) { 
    107116                        ASTNode node = (ASTNode) fCurrentAst; 
    108                         resolveSymbolTable(node); 
     117                        topLevelSymbolTable = resolveSymbolTable(node); 
    109118                        if (resolve) { 
     119                                buildIndex(node); 
    110120                                resolveDeclarations(node); 
    111121                        } 
     
    117127        } 
    118128         
     129        protected void buildIndex(ASTNode root) { 
     130                root.accept(new IndexingVisitor(this)); 
     131        } 
     132         
    119133        protected void resolveDeclarations(ASTNode root) { 
    120                 root.accept(new ResolvingVisitor(parser)); 
     134                root.accept(new ResolvingVisitor(this)); 
    121135        } 
    122136 
    123         protected void resolveSymbolTable(ASTNode root) { 
    124                 parser.symbolTableStack = new Stack<SymbolTable>(); 
    125                 parser.topLevelSymbolTable = new SymbolTable(null, Program.class); 
    126                 parser.symbolTableStack.push(parser.topLevelSymbolTable); 
    127                 root.accept(new SymbolTableVisitor(parser)); 
     137        protected SymbolTable resolveSymbolTable(ASTNode root) { 
     138                SymbolTableVisitor symbolTableVisitor = new SymbolTableVisitor(this); 
     139                root.accept(symbolTableVisitor); 
     140                return symbolTableVisitor.getTopLevelSymbolTable(); 
    128141        } 
    129142 
     
    131144                return backupAst; 
    132145        } 
     146 
     147        public SymbolTable getEnclosingSymbolTable(IAst node) { 
     148                if (topLevelSymbolTable  != null) { 
     149                        return topLevelSymbolTable.getEnclosingSymbolTable(node); 
     150                } 
     151                return null; 
     152        } 
    133153} 
  • org.axdt.as3/src/org/axdt/as3/imp/parser/AS3Parser.g

    r82cecb8 r25b5d22  
    2020 
    2121%Globals 
    22     /.import org.eclipse.imp.parser.IParser; 
    23     import java.util.Stack; 
     22    /. 
    2423    ./ 
    2524%End 
     
    2726%Define 
    2827    $ast_class /.Object./ 
    29     $additional_interfaces /., IParser./ 
     28    $additional_interfaces /., org.eclipse.imp.parser.IParser ./ 
    3029%End 
    3130 
     
    10431042%Headers 
    10441043/. 
    1045                 Stack<SymbolTable> symbolTableStack = null; 
    1046                 SymbolTable topLevelSymbolTable = null; 
    1047                  
    1048                 public SymbolTable getTopLevelSymbolTable() { 
    1049                         return topLevelSymbolTable; 
    1050                 } 
    1051                  
    1052                 public SymbolTable getEnclosingSymbolTable(IAst n) { 
    1053                         if (topLevelSymbolTable != null) { 
    1054                                 return topLevelSymbolTable.getEnclosingSymbolTable(n); 
    1055                         } 
    1056                         return null; 
    1057                 } 
    1058                  
    1059                 public void resolve(ASTNode root) { 
    1060                         if (root != null) { 
    1061                                 symbolTableStack = new Stack<SymbolTable>(); 
    1062                                 topLevelSymbolTable = new SymbolTable(null, Program.class); 
    1063                                 symbolTableStack.push(topLevelSymbolTable); 
    1064                                 root.accept(new SymbolTableVisitor(this)); 
    1065                         } 
    1066                 } 
    10671044./ 
    10681045%End 
  • org.axdt.as3/src/org/axdt/as3/imp/parser/DiagnoseVisitor.java

    r69d1ca8 r25b5d22  
    99import org.axdt.as3.imp.parser.Ast.ASTNode; 
    1010import org.axdt.as3.imp.parser.Ast.AbstractVisitor; 
     11import org.eclipse.core.resources.IFile; 
     12import org.eclipse.core.resources.IProject; 
    1113 
    1214public class DiagnoseVisitor extends AbstractVisitor { 
    1315        protected static int[] NULL_LOCATION = new int[] {0,0}; 
    1416         
    15         protected final IPrsStream prs; 
    16         protected final ILexStream lex; 
    17         protected final AS3Parser parser; 
     17        protected final IPrsStream prsStream; 
     18        protected final ILexStream lexStream; 
     19        protected AS3ParseController parseController; 
     20        protected int errorCount = 0; 
     21        protected boolean severeError = false; 
     22 
     23        public DiagnoseVisitor(AS3ParseController parseController) { 
     24                this.parseController = parseController; 
     25                this.prsStream = parseController.getParser().getIPrsStream(); 
     26                this.lexStream = prsStream.getILexStream(); 
     27        } 
     28 
     29        protected IProject getProject() { 
     30                return parseController.getProject().getRawProject(); 
     31        } 
    1832         
    19         public DiagnoseVisitor(AS3Parser parser) { 
    20                 this.prs = parser.getIPrsStream(); 
    21                 this.lex = prs.getILexStream(); 
    22                 this.parser = parser; 
     33        protected IFile getFile() { 
     34                return getProject().getFile(parseController.getPath()); 
    2335        } 
    2436 
     
    3547        } 
    3648        public void emitError(int code, int startOffset, int endOffset, String message) { 
    37                 int[] loc = lex.getLocation(startOffset, endOffset); 
     49                int[] loc = lexStream.getLocation(startOffset, endOffset); 
    3850                String[] msgs = new String[] {message}; 
    39                 IMessageHandler handler = lex.getMessageHandler(); 
    40                 handler.handleMessage(code, loc, NULL_LOCATION, prs.getFileName(),      msgs); 
     51                IMessageHandler handler = lexStream.getMessageHandler(); 
     52                handler.handleMessage(code, loc, NULL_LOCATION, prsStream.getFileName(), msgs); 
     53                errorCount++; 
    4154        } 
    4255 
  • org.axdt.as3/src/org/axdt/as3/imp/parser/ResolvingVisitor.java

    r69d1ca8 r25b5d22  
    44 
    55import org.axdt.as3.AS3Plugin; 
     6import org.axdt.as3.imp.parser.Ast.AssignmentExpression; 
    67import org.axdt.as3.imp.parser.Ast.Block; 
    78import org.axdt.as3.imp.parser.Ast.ClassDefinition; 
     9import org.axdt.as3.imp.parser.Ast.ExpressionStatement; 
    810import org.axdt.as3.imp.parser.Ast.FunctionDefinition; 
    911import org.axdt.as3.imp.parser.Ast.FunctionExpression; 
     
    1921import org.axdt.axdoc.util.Index0r; 
    2022import org.axdt.common.preferences.AxdtPreferences; 
    21 import org.eclipse.core.resources.IFile; 
    22 import org.eclipse.core.resources.ResourcesPlugin; 
    23 import org.eclipse.core.runtime.Path; 
    2423 
    2524public class ResolvingVisitor extends DiagnoseVisitor { 
     
    2726        private boolean addDebugErrors; 
    2827 
    29         public ResolvingVisitor(AS3Parser parser) { 
    30                 super(parser); 
     28        public ResolvingVisitor(AS3ParseController parseController) { 
     29                super(parseController); 
    3130                addDebugErrors = AS3Plugin.getDefault() != null && AxdtPreferences.doDebug(); 
    3231                index0r = Index0r.getInstance(); 
     
    4039        @Override 
    4140        public boolean visit(PackageDefinition n) { 
    42                 String fileName = parser.getIPrsStream().getFileName(); 
    43                 IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(new Path(fileName)); 
    44                 String packageName = (files.length>0) ? AS3Util.getExpectedPackageName(files[0]): "";  
     41                String packageName = AS3Util.getExpectedPackageName(getFile());  
    4542                // check if name corresponds with folder names 
    4643                if (n.getName() != null) { 
     
    125122                } 
    126123                if (grandp != null) { 
    127                         String fileName = parser.getIPrsStream().getFileName(); 
    128124                        String nameString = name.getIdent().toString(); 
    129                         if (!fileName.endsWith(nameString+".as"))  
     125                        String expectedName = AS3Util.getExpectedMemberName(getFile()); 
     126                        if (!nameString.equals(expectedName))  
    130127                                emitError(name, "public package member name should match the file name"); 
    131128                } 
     
    134131        @Override 
    135132        public boolean visit(FunctionDefinition n) { 
    136                 return true; 
     133                return false; 
    137134        } 
    138135 
    139136        @Override 
    140137        public boolean visit(FunctionExpression n) { 
    141                 return true; 
     138                return false; 
    142139        } 
    143140 
    144141        @Override 
    145142        public boolean visit(VariableBinding n) { 
    146                 return true; 
     143                return false; 
     144        } 
     145        @Override 
     146        public boolean visit(AssignmentExpression n) { 
     147                return false; 
     148        } 
     149        @Override 
     150        public boolean visit(ExpressionStatement n) { 
     151                return false; 
    147152        } 
    148153} 
  • org.axdt.as3/src/org/axdt/as3/imp/parser/SymbolTableVisitor.java

    r69d1ca8 r25b5d22  
    11package org.axdt.as3.imp.parser; 
     2 
     3import java.util.Stack; 
    24 
    35import lpg.runtime.IAst; 
     
    1517import org.axdt.as3.imp.parser.Ast.PackageDefinition; 
    1618import org.axdt.as3.imp.parser.Ast.PlainParameter; 
     19import org.axdt.as3.imp.parser.Ast.Program; 
    1720import org.axdt.as3.imp.parser.Ast.RestParameter; 
    1821import org.axdt.as3.imp.parser.Ast.VariableBinding; 
     
    2124public class SymbolTableVisitor extends DiagnoseVisitor { 
    2225 
    23         public SymbolTableVisitor(AS3Parser parser) { 
    24                 super(parser); 
     26        private Stack<SymbolTable> symbolTableStack = null; 
     27        private SymbolTable topLevelSymbolTable = null; 
     28 
     29        public SymbolTableVisitor(AS3ParseController parseController) { 
     30                super(parseController); 
     31                symbolTableStack = new Stack<SymbolTable>(); 
     32                topLevelSymbolTable = pushNewTable(Program.class); 
     33        } 
     34         
     35        public SymbolTable getTopLevelSymbolTable() { 
     36                return topLevelSymbolTable; 
     37        } 
     38         
     39        public SymbolTable getEnclosingSymbolTable(IAst n) { 
     40                if (topLevelSymbolTable != null) { 
     41                        return topLevelSymbolTable.getEnclosingSymbolTable(n); 
     42                } 
     43                return null; 
    2544        } 
    2645 
    2746        private SymbolTable pushNewTable(Class<?> clazz) { 
    28                 SymbolTable table = new SymbolTable(peekTable(), clazz); 
    29                 parser.symbolTableStack.push(table); 
     47                SymbolTable table = new SymbolTable(peek(), clazz); 
     48                symbolTableStack.push(table); 
    3049                return table; 
    3150        } 
    3251 
    33         private SymbolTable peekTable() { 
    34                 return parser.symbolTableStack.peek(); 
     52        private SymbolTable peek() { 
     53                return symbolTableStack.isEmpty() ? null : symbolTableStack.peek(); 
     54        } 
     55        private SymbolTable pop() { 
     56                return symbolTableStack.isEmpty() ? null : symbolTableStack.pop(); 
    3557        } 
    3658 
     
    4163 
    4264        public void endVisit(Block n) { 
    43                 parser.symbolTableStack.pop(); 
     65                pop(); 
    4466        } 
    4567 
     
    5476 
    5577        public void endVisit(ClassDefinition n) { 
    56                 parser.symbolTableStack.pop(); 
     78                pop(); 
    5779        } 
    5880         
     
    6486        public boolean visit(FunctionDefinition n) { 
    6587                IToken id = n.getName().getIToken(); 
    66                 SymbolTable symbol_table = peekTable(); 
     88                SymbolTable symbol_table = peek(); 
    6789                String name = id.toString(); 
    6890                if (n.getAccessor() != null) { 
     
    87109 
    88110        public void endVisit(FunctionDefinition n) { 
    89                 parser.symbolTableStack.pop(); 
     111                pop(); 
    90112        } 
    91113 
     
    96118 
    97119        public void endVisit(FunctionExpression n) { 
    98                 parser.symbolTableStack.pop(); 
     120                pop(); 
    99121        } 
    100122 
     
    102124        public boolean visit(PlainParameter n) { 
    103125                String name = n.getIdent().toString(); 
    104                 if (!peekTable().create(name, n)) emitError(n, "Illegal redeclaration of " + name); 
    105                 return true; 
     126                if (!peek().create(name, n)) emitError(n, "Illegal redeclaration of " + name); 
     127                return false; 
    106128        } 
    107129 
     
    109131        public boolean visit(RestParameter n) { 
    110132                String name = (n.getIdent()!= null) ? n.getIdent().toString() : n.getUntyped().toString(); 
    111                 if (!peekTable().create(name, n)) emitError(n, "Illegal redeclaration of " + name); 
    112                 return true; 
     133                if (!peek().create(name, n)) emitError(n, "Illegal redeclaration of " + name); 
     134                return false; 
    113135        } 
    114136 
    115137        @Override 
    116138        public boolean visit(AssignmentExpression n) { 
    117                 return true; 
     139                return false; 
    118140        } 
    119141 
    120142        @Override 
    121143        public boolean visit(ExpressionStatement n) { 
    122                 return true; 
     144                return false; 
    123145        } 
    124146 
     
    126148        public boolean visit(VariableBinding n) { 
    127149                IAst parent = n.getParent().getParent(); 
    128                 SymbolTable symbol_table = peekTable(); 
     150                SymbolTable symbol_table = peek(); 
    129151                String name = n.getIdent().toString(); 
    130152                if (parent instanceof VariableDefinition) { 
     
    142164                } 
    143165                if (!symbol_table.create(name, n)) emitError(n, "Illegal redeclaration of " + name); 
    144                 return true; 
     166                return false; 
    145167        } 
    146168} 
  • org.axdt.as3/src/org/axdt/as3/imp/services/AS3HoverHelper.java

    r49cbb50 r25b5d22  
    9999                                        .getRightIToken().getEndOffset()); 
    100100                } else if (helpNode instanceof String) { 
    101                         msg = "id: "+ helpNode.toString()+"<br/>"; 
    102101                        AXIndexNode[] found = Index0r.getInstance().find(helpNode.toString()); 
     102                        msg = ""; 
    103103                        if (found.length > 0) { 
    104                                 AXNode indexNode = found[0].getReference(); 
     104                                AXNode indexNode = found[0].getOrCreateReference(); 
    105105                                if (indexNode != null && indexNode.getAsdoc().size() > 0) { 
    106106                                        msg += indexNode.getAsdoc().get(0); 
    107107                                } 
    108108                        } 
     109                        if (msg.length() == 0) msg = "no doc for id: "+ helpNode.toString(); 
    109110                } else if (helpNode != null) { 
    110111                        msg = helpNode.toString(); 
    111112                } 
    112 //              int maxMsgLen = 80; 
    113113                if (msg == null || msg.length() == 0) return null; 
    114 //              else if (msg.length() <= maxMsgLen) return msg; 
    115 //              else return msg.subSequence(0, maxMsgLen) + "..."; 
    116114                return msg; 
    117115        } 
  • org.axdt.as3/src/org/axdt/as3/imp/services/AS3HyperLinkDetector.java

    r49cbb50 r25b5d22  
    11package org.axdt.as3.imp.services; 
    22 
    3 import org.axdt.as3.imp.builders.AS3Builder; 
     3import java.util.ArrayList; 
     4 
     5import org.axdt.as3.util.AS3EditorHyperLink; 
    46import org.axdt.axdoc.model.AXIndex; 
    57import org.axdt.axdoc.model.AXIndexNode; 
     
    79import org.axdt.axdoc.util.Index0r; 
    810import org.axdt.util.URIHyperLink; 
     11import org.eclipse.core.resources.IFile; 
     12import org.eclipse.core.resources.IResource; 
    913import org.eclipse.core.resources.ResourcesPlugin; 
    1014import org.eclipse.core.runtime.IPath; 
     15import org.eclipse.emf.common.util.URI; 
    1116import org.eclipse.imp.editor.IRegionSelectionService; 
    1217import org.eclipse.imp.editor.TargetLink; 
    1318import org.eclipse.imp.language.ILanguageService; 
    14 import org.eclipse.imp.language.ServiceFactory; 
    1519import org.eclipse.imp.parser.IParseController; 
    1620import org.eclipse.imp.parser.ISourcePositionLocator; 
    17 import org.eclipse.imp.services.IReferenceResolver; 
    1821import org.eclipse.imp.services.ISourceHyperlinkDetector; 
    1922import org.eclipse.jface.text.IRegion; 
     
    2629public class AS3HyperLinkDetector implements ISourceHyperlinkDetector, ILanguageService { 
    2730 
    28         private IReferenceResolver fResolver; 
     31        private AS3ReferenceResolver resolver; 
    2932        public AS3HyperLinkDetector() { 
     33                resolver = new AS3ReferenceResolver();  
    3034        } 
    3135        public IHyperlink[] detectHyperlinks(IRegion region, ITextEditor editor, 
    3236                        ITextViewer textViewer, IParseController parseController) { 
    3337        // This is the only language-specific bit ... 
    34         if (fResolver == null) { 
    35             fResolver = ServiceFactory.getInstance().getReferenceResolver(AS3Builder.LANGUAGE); 
    36         } 
    37         if (fResolver == null) return null; 
    3838        if (parseController == null) return null; 
    3939         
     
    4747        Object source = nodeLocator.findNode(ast, offset); 
    4848        if (source == null) return null; 
     49        // Got a suitable link source node; get link target node 
     50        Object target = resolver.getLinkTarget(source, parseController); 
     51        if (target == null) return null; 
     52         
     53        String linkText = resolver.getLinkText(source); 
     54        int srcStart= nodeLocator.getStartOffset(source); 
     55        int srcLength= nodeLocator.getEndOffset(source) - srcStart + 1; 
    4956 
    50         // Got a suitable link source node; get link target node 
    51         final Object target = fResolver.getLinkTarget(source, parseController); 
    52         if (target == null) return null; 
    53  
    54         // Link target node exists; get info for new hyperlink 
    55         // Note:  source presumably has a legitimate starting offset 
    56         // and length (since they have been selected from the source file) 
    57         final int srcStart= nodeLocator.getStartOffset(source); 
    58         final int srcLength= nodeLocator.getEndOffset(source) - srcStart + 1; 
    59  
    60         if (target instanceof String) { 
     57        if (target instanceof String) { 
    6158                AXIndexNode[] find = Index0r.getInstance().find(target.toString()); 
    62                 IHyperlink[] result = new IHyperlink[find.length]; 
     59                ArrayList<IHyperlink> result = new ArrayList<IHyperlink>(); 
    6360                Region srcRegion = new Region(srcStart,srcLength); 
    6461                for (int i=0; i < find.length; i++) { 
    65                         String url = find[i].fullUrl(); 
    66                         if (find[i] instanceof AXIndex) url += AXDocParser.URL_PACKAGE_DETAIL; 
    67                         result[i] = new URIHyperLink(srcRegion, url); 
     62                        URI uri = URI.createURI(find[i].fullUrl()); 
     63                        if (uri.isPlatformResource()) { 
     64                                        try { 
     65                                                String platformString = uri.toPlatformString(true); 
     66                                                IResource targetResource = ResourcesPlugin.getWorkspace().getRoot().findMember(platformString); 
     67                                                if (targetResource instanceof IFile) { 
     68                                                        result.add(new AS3EditorHyperLink(linkText, srcRegion, (IFile)targetResource)); 
     69                                                } 
     70                                        } catch (Exception e) { 
     71                                                e.printStackTrace(); 
     72                                        } 
     73                        } else {  
     74                                if (find[i] instanceof AXIndex) { 
     75                                        uri.appendSegment(AXDocParser.URL_PACKAGE_DETAIL); 
     76                                } 
     77                                result.add(new URIHyperLink(srcRegion, uri.toString())); 
     78                        } 
    6879                } 
    69                 return result; 
     80                return result.toArray(new IHyperlink[result.size()]); 
    7081        } 
    7182        // The target (depending on what--and where--the target is) may not have a 
     
    7384        // to the beginning of the file and give it a nominal length. 
    7485 
    75         final int targetStart= (nodeLocator.getStartOffset(target) < 0) ? 0 : nodeLocator.getStartOffset(target); 
    76         final int targetLength= nodeLocator.getEndOffset(target) - targetStart + 1; 
     86        int targetStart= (nodeLocator.getStartOffset(target) < 0) ? 0 : nodeLocator.getStartOffset(target); 
     87        int targetLength= nodeLocator.getEndOffset(target) - targetStart + 1; 
    7788 
    7889        // Use the file path info to determine whether the target editor is the same as 
    7990        // the source editor, and initialize the TargetLink accordingly. 
    80         final IPath targetPath= nodeLocator.getPath(target); 
     91        IPath targetPath= nodeLocator.getPath(target); 
    8192        // SMS 10 Sep 2007 
    8293        if (targetPath == null) { 
     
    8495                return null; 
    8596        } 
    86         final String linkText = fResolver.getLinkText(source); 
    8797 
    8898        IPath srcPath= ((IFileEditorInput) editor.getEditorInput()).getFile().getLocation(); 
     
    113123            return null; 
    114124 
     125         
    115126        IRegionSelectionService selService= isSamePath ? (IRegionSelectionService) editor.getAdapter(IRegionSelectionService.class) : null; 
    116127 
  • org.axdt.as3/src/org/axdt/as3/imp/services/AS3ReferenceResolver.java

    r49cbb50 r25b5d22  
    33import lpg.runtime.IAst; 
    44 
     5import org.axdt.as3.imp.parser.AS3ParseController; 
    56import org.axdt.as3.imp.parser.AS3Parser; 
    67import org.axdt.as3.imp.parser.SymbolTable; 
     
    5960 
    6061        private Object lookInSymbolTable(IParseController controller, IAst node, String stringId) { 
    61                 AS3Parser parser = (AS3Parser) ((SimpleLPGParseController) controller).getParser(); 
    62                 SymbolTable symtab = parser.getEnclosingSymbolTable(node); 
     62                SymbolTable symtab = ((AS3ParseController) controller).getEnclosingSymbolTable(node); 
    6363                return symtab.findDeclaration(stringId); 
    6464        } 
  • org.axdt.axdoc.model/src/org/axdt/axdoc/model/impl/AXEntryImpl.java

    r2d81bf0 r25b5d22  
    2020import org.axdt.axdoc.model.AXPackage; 
    2121import org.axdt.axdoc.model.AXRoot; 
     22import org.axdt.axdoc.model.AXRootType; 
    2223import org.axdt.axdoc.model.AXType; 
    2324import org.eclipse.emf.common.notify.Notification; 
     
    401402                String url = name; 
    402403                AXIndexNode parent = getParent(); 
    403                 if (getType().isType()) { 
     404                if (getRoot() != null && AXRootType.SOURCE.equals(getRoot().getRootType())) { 
     405                        url += ".as"; 
     406                } else if (getType().isType()) { 
    404407                        url += ".html"; 
    405408                } else if (getType().isMember()) {