Changeset 87f02d16be3ad1849f47a8a1e5c588a5924d4677
- Timestamp:
- 06/28/09 23:36:49 (9 months ago)
- git-author:
- mb0 <mb0@mb0.org> / 2009-05-31T16:03:28Z+0200
- Parents:
- 79dd6994d81bd77cd232a3d55e8531b73adf71aa
- Children:
- 369d8ecb6239f8f96d0abe435a0b50d8fbaabb9a
- git-committer:
- mb0 <mb0@mb0.org> / 2009-06-28T23:36:49Z+0200
- Files:
-
- 11 added
- 1 removed
- 29 modified
- 3 moved
-
org.axdt.as3/META-INF/MANIFEST.MF (modified) (1 diff)
-
org.axdt.as3/src/org/axdt/as3/AS3Plugin.java (modified) (3 diffs)
-
org.axdt.as3/src/org/axdt/as3/imp/contentProposer/AS3ContentProposer.java (modified) (2 diffs)
-
org.axdt.as3/src/org/axdt/as3/imp/hoverHelper/AS3HoverHelper.java (modified) (2 diffs)
-
org.axdt.as3/src/org/axdt/as3/imp/parser/AS3ParseController.java (modified) (4 diffs)
-
org.axdt.as3/src/org/axdt/as3/imp/parser/AS3Parser.g (modified) (1 diff)
-
org.axdt.as3/src/org/axdt/as3/imp/parser/SymbolTableVisitor.java (modified) (5 diffs)
-
org.axdt.as3/src/org/axdt/as3/imp/referenceResolvers/AS3ReferenceResolver.java (modified) (3 diffs)
-
org.axdt.as3/src/org/axdt/as3/preferences/AS3Preferences.java (modified) (3 diffs)
-
org.axdt.as3/src/org/axdt/as3/templates/AS3TemplateCompletionProcessor.java (modified) (2 diffs)
-
org.axdt.axdoc.model/.classpath (modified) (1 diff)
-
org.axdt.axdoc.model/META-INF/MANIFEST.MF (modified) (2 diffs)
-
org.axdt.axdoc.model/build.properties (modified) (1 diff)
-
org.axdt.axdoc.model/model/AXDoc.ecore (modified) (1 diff)
-
org.axdt.axdoc.model/model/AXDocXML.xsd (modified) (1 diff)
-
org.axdt.axdoc.model/src/org/axdt/axdoc/model/AXIndex.java (modified) (1 diff)
-
org.axdt.axdoc.model/src/org/axdt/axdoc/model/impl/AXDocPackageImpl.java (modified) (1 diff)
-
org.axdt.axdoc.model/src/org/axdt/axdoc/model/impl/AXIndexImpl.java (modified) (2 diffs)
-
org.axdt.axdoc.model/src/org/axdt/axdoc/model/util/AXUtil.java (modified) (2 diffs)
-
org.axdt.axdoc.test/.axdoc (deleted)
-
org.axdt.axdoc.test/.settings/org.eclipse.jdt.core.prefs (modified) (1 diff)
-
org.axdt.axdoc.test/META-INF/MANIFEST.MF (modified) (1 diff)
-
org.axdt.axdoc.test/plugin.properties (modified) (1 diff)
-
org.axdt.axdoc.test/src/org/axdt/axdoc/AXDocAllTest.java (modified) (1 diff)
-
org.axdt.axdoc.test/src/org/axdt/axdoc/AXDocRegularTest.java (modified) (2 diffs)
-
org.axdt.axdoc.test/src/org/axdt/axdoc/model/AXIndexTest.java (modified) (2 diffs)
-
org.axdt.axdoc.test/src/org/axdt/axdoc/model/coffeetime/ASDocFormatTest.java (modified) (1 diff)
-
org.axdt.axdoc.test/src/org/axdt/axdoc/model/util/AXDocParserTest.java (modified) (1 diff)
-
org.axdt.axdoc.test/src/org/axdt/axdoc/util/Index0rTest.java (added)
-
org.axdt.axdoc/.classpath (added)
-
org.axdt.axdoc/.project (added)
-
org.axdt.axdoc/.settings/org.eclipse.jdt.core.prefs (added)
-
org.axdt.axdoc/META-INF/MANIFEST.MF (added)
-
org.axdt.axdoc/build.properties (added)
-
org.axdt.axdoc/plugin.xml (added)
-
org.axdt.axdoc/src/org/axdt/axdoc/AXDocPlugin.java (added)
-
org.axdt.axdoc/src/org/axdt/axdoc/preferences/AXDocPreferencePage.java (added)
-
org.axdt.axdoc/src/org/axdt/axdoc/preferences/AXDocPreferences.java (added)
-
org.axdt.axdoc/src/org/axdt/axdoc/util/AXDocParser.java (moved) (moved from org.axdt.axdoc.model/src/org/axdt/axdoc/model/util/AXDocParser.java) (6 diffs)
-
org.axdt.axdoc/src/org/axdt/axdoc/util/HtmlLoader.java (moved) (moved from org.axdt.axdoc.model/src/org/axdt/axdoc/model/util/HtmlLoader.java) (1 diff)
-
org.axdt.axdoc/src/org/axdt/axdoc/util/Index0r.java (added)
-
org.axdt.axdoc/tagsoup-1.2.jar (moved) (moved from org.axdt.axdoc.model/tagsoup-1.2.jar)
-
org.axdt.common/src/org/axdt/common/AxdtPlugin.java (modified) (1 diff)
-
org.axdt.common/src/org/axdt/common/preferences/AxdtPreferences.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
org.axdt.as3/META-INF/MANIFEST.MF
rf136e7c r87f02d1 14 14 org.eclipse.ui.workbench.texteditor, 15 15 org.axdt.common, 16 org.eclipse.ui.editors 16 org.eclipse.ui.editors, 17 org.axdt.axdoc.model, 18 org.axdt.axdoc 17 19 Eclipse-LazyStart: true 18 20 Bundle-Activator: org.axdt.as3.AS3Plugin -
org.axdt.as3/src/org/axdt/as3/AS3Plugin.java
r0f87444 r87f02d1 5 5 6 6 import org.axdt.as3.templates.AS3ContextType; 7 import org.axdt.common.preferences.AxdtPreferences; 7 8 import org.eclipse.core.runtime.FileLocator; 8 9 import org.eclipse.core.runtime.IPath; … … 48 49 } 49 50 50 /* 51 * (non-Javadoc) 52 * 53 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) 54 */ 51 @Override 55 52 public void start(BundleContext context) throws Exception { 56 53 super.start(context); … … 134 131 } 135 132 133 public void debug(String msg) { 134 debug(msg, null); 135 } 136 137 public void debug(String msg, Exception e) { 138 if (AxdtPreferences.doDebug()) { 139 int statusType = e == null ? Status.INFO : Status.WARNING; 140 getLog().log(new Status(statusType, PLUGIN_ID, Status.OK, msg, e)); 141 } 142 } 143 136 144 @Override 137 145 public String getLanguageID() { -
org.axdt.as3/src/org/axdt/as3/imp/contentProposer/AS3ContentProposer.java
r1d13b65 r87f02d1 1 1 package org.axdt.as3.imp.contentProposer; 2 2 3 import org.axdt.as3.imp.parser.*; 4 import org.axdt.as3.imp.parser.Ast.*; 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Comparator; 6 7 import lpg.runtime.IAst; 8 import lpg.runtime.IPrsStream; 9 import lpg.runtime.IToken; 10 11 import org.axdt.as3.AS3Plugin; 12 import org.axdt.as3.imp.parser.AS3ASTNodeLocator; 13 import org.axdt.as3.imp.parser.AS3ParseController; 14 import org.axdt.as3.imp.parser.AS3Parsersym; 15 import org.axdt.as3.imp.parser.SymbolTable; 16 import org.axdt.as3.imp.parser.Ast.ASTNode; 17 import org.axdt.as3.imp.parser.Ast.IAnnotatableDirective_full; 18 import org.axdt.as3.imp.parser.Ast.IName; 19 import org.axdt.as3.imp.parser.Ast.PackageDefinition; 20 import org.axdt.as3.preferences.AS3Preferences; 5 21 import org.axdt.as3.templates.AS3TemplateCompletionProcessor; 6 7 import lpg.runtime.*; 8 9 import java.util.*; 10 11 import org.eclipse.jface.text.contentassist.ICompletionProposal; 12 import org.eclipse.jface.text.ITextViewer; 13 import org.eclipse.imp.services.IContentProposer; 22 import org.eclipse.core.resources.IContainer; 23 import org.eclipse.core.runtime.IPath; 14 24 import org.eclipse.imp.editor.SourceProposal; 15 25 import org.eclipse.imp.parser.IParseController; 16 import org.eclipse.imp.parser.SimpleLPGParseController; 26 import org.eclipse.imp.services.IContentProposer; 27 import org.eclipse.jface.text.BadLocationException; 28 import org.eclipse.jface.text.ITextViewer; 29 import org.eclipse.jface.text.contentassist.ICompletionProposal; 17 30 18 31 public class AS3ContentProposer implements IContentProposer { 19 20 private static final String[] keywords = new String[] {"public", "private", "protected", 21 "internal", "static", "final", "dynamic", "override", "class", "interface", "use", 22 "namespace", "function", "var", "const", "import"}; 32 33 private static AS3ASTNodeLocator locator = new AS3ASTNodeLocator(); 34 35 private boolean offsetWithinToken; 36 private boolean usingBackup; 37 private int offset; 38 private AS3ParseController control; 39 private IToken token; 40 private String prefix; 41 private ASTNode ast; 42 private ASTNode node; 43 44 private ArrayList<IAst> ancestors; 45 46 private IToken previous; 47 48 private IToken next; 49 50 private boolean offsetAfterToken; 51 52 private ITextViewer viewer; 53 54 private boolean dontTrustTokens; 55 56 private int originalOffset; 57 58 private boolean offsetBeforeToken; 59 60 private int offsetDiff; 61 62 private void clear() { 63 offsetWithinToken = offsetAfterToken = offsetBeforeToken = false; 64 usingBackup = dontTrustTokens = false; 65 prefix = null; 66 ancestors = null; 67 token = previous = next = null; 68 ast = node = null; 69 originalOffset = offset; 70 } 23 71 24 72 public AS3ContentProposer() { 25 } 26 27 private IToken getToken(IParseController controller, int offset) { 28 IPrsStream stream = ((SimpleLPGParseController) controller).getParser().getIPrsStream(); 29 int index = stream.getTokenIndexAtCharacter(offset), token_index = (index < 0 ? -(index - 1) 30 : index), previous_index = stream.getPrevious(token_index); 31 if ((stream.getKind(previous_index) == AS3Parsersym.TK_IDENTIFIER || ((AS3ParseController) controller) 32 .isKeyword(stream.getKind(previous_index)))) { 33 return stream.getIToken(previous_index); 34 } 35 return stream.getIToken(token_index); 36 } 37 38 private String getPrefix(IToken token, int offset) { 39 if (token.getKind() == AS3Parsersym.TK_IDENTIFIER) 40 if (offset >= token.getStartOffset() && offset <= token.getEndOffset() + 1) 41 return token.toString().substring(0, offset - token.getStartOffset()); 73 74 } 75 private boolean tokenIsValid(IToken t) { 76 String text = t.toString(); 77 try { 78 String string = viewer.getDocument().get(t.getStartOffset(), text.length()); 79 return text.equals(string); 80 } catch (BadLocationException e) { 81 AS3Plugin.getDefault().debug("error validating token", e); 82 } 83 return false; 84 } 85 private String tokenIsValid(IToken t, int diff, int lendiff) { 86 String text = t.toString(); 87 try { 88 int offset = t.getStartOffset()+diff; 89 int length = text.length()+lendiff; 90 String string = viewer.getDocument().get(offset, length); 91 if (lendiff>0) { 92 if (string.startsWith(text)) { 93 return string; 94 } 95 } else if (diff != 0) { 96 if (text.equals(string)) 97 return string; 98 } 99 } catch (BadLocationException e) { 100 AS3Plugin.getDefault().debug("error validating token", e); 101 } 102 return null; 103 } 104 protected boolean collectInfo(IParseController controller, int offset, ITextViewer viewer) { 105 this.viewer = viewer; 106 this.control = (AS3ParseController) controller; 107 this.offset = offset; 108 offsetDiff = offset - originalOffset; 109 ASTNode newast = getAst(); 110 if (newast != null && newast == ast) { 111 AS3Plugin.getDefault().debug("using old ast nothing changed"); 112 return true; 113 } 114 if (newast == null) { 115 AS3Plugin.getDefault().debug("no ast available try to recover"); 116 Object backupAst = control.getBackupAst(); 117 if (! (backupAst instanceof ASTNode)) { 118 AS3Plugin.getDefault().debug("no backup ast. recover failed."); 119 return false; 120 } 121 newast = (ASTNode) backupAst; 122 String validPrefix = tokenIsValid(token,0,offsetDiff); 123 if (validPrefix != null) { 124 if (offsetDiff>0) { 125 boolean previousIsValid = tokenIsValid(previous); 126 boolean nextIsValid = null != tokenIsValid(next,offsetDiff,0); 127 if (previousIsValid && nextIsValid) { 128 prefix = validPrefix; 129 dontTrustTokens = true; 130 this.offset = offset; 131 AS3Plugin.getDefault().debug("recovery ok."); 132 return true; 133 } 134 } 135 } 136 return false; 137 } 138 clear(); 139 try { 140 ast = newast; 141 IPrsStream stream = control.getParser().getIPrsStream(); 142 int index = stream.getTokenIndexAtCharacter(offset); 143 token = getToken(stream, index < 0 ? -index + 1: index); 144 previous = getToken(stream, token.getTokenIndex()-1); 145 if (previous.getEndOffset() == offset - 1) { 146 offsetAfterToken = true; 147 next = token; 148 token = previous; 149 previous = stream.getIToken(token.getTokenIndex()-1); 150 } else { 151 next = stream.getIToken(stream.getNext(token.getTokenIndex())); 152 } 153 offsetWithinToken = Sym.isWithinToken(offset, token); 154 offsetBeforeToken = token.getStartOffset() < token.getStartOffset(); 155 if ((offsetAfterToken||offsetWithinToken) && Sym.isKeyword(token)) 156 return false; 157 this.prefix = offsetWithinToken ? Sym.getPrefix(offset, token) 158 : ( offsetAfterToken ? token.toString() : ""); 159 node = getNode(token); 160 collectAncestorInfo(node); 161 } catch (Exception e) { 162 AS3Plugin.getDefault().debug("error collecting context info for completion proposals", e); 163 } 164 return true; 165 } 166 private IToken getToken(IPrsStream s, int index) { 167 IToken result = s.getIToken(index); 168 if (result.getKind() == Sym.TK_VirtualSemicolon) 169 result = s.getIToken(index-1); 170 return result; 171 } 172 private void collectAncestorInfo(ASTNode node) { 173 ancestors = new ArrayList<IAst>(); 174 for (IAst n = node; n != null; n = n.getParent()) { 175 if (n instanceof IAnnotatableDirective_full 176 || n instanceof PackageDefinition 177 ) { 178 ancestors.add(n); 179 } 180 } 181 } 182 private ASTNode getNode(IToken t) { 183 Object object = locator.findNode(ast, t.getStartOffset(), t.getEndOffset()); 184 return (object instanceof ASTNode) ? (ASTNode) object : null; 185 } 186 private ASTNode getAst() { 187 Object object = control.parse(viewer.getDocument().get(), null); 188 return (object instanceof ASTNode) ? (ASTNode) object : null; 189 } 190 private String getExpectedMemberName() { 191 return control.getPath().removeFileExtension().lastSegment(); 192 } 193 private String getExpectedPackageName() { 194 IContainer[] sourcePaths = AS3Preferences.getSourcePaths(control.getProject().getResource()); 195 IPath path = control.getPath().removeLastSegments(1); 196 for (IContainer container: sourcePaths) { 197 IPath srcPath = container.getFullPath().removeFirstSegments(1); 198 if (srcPath.isPrefixOf(path)) { 199 path = path.removeFirstSegments(srcPath.segmentCount()); 200 return path.toString().replace('/', '.'); 201 } 202 } 42 203 return ""; 43 204 } 44 45 205 /** 46 206 * Returns an array of content proposals applicable relative to the AST of … … 64 224 public ICompletionProposal[] getContentProposals(IParseController controller, int offset, 65 225 ITextViewer viewer) { 66 // a list of proposals. 67 ArrayList<ICompletionProposal> list = new ArrayList<ICompletionProposal>(); 68 IToken token = getToken(controller, offset); 69 boolean hasspace = offset > token.getEndOffset() + 1; 70 boolean isBackup = false; 71 String prefix = getPrefix(token, offset); 72 AS3ASTNodeLocator locator = new AS3ASTNodeLocator(); 73 AS3ParseController pc = (AS3ParseController)controller; 74 75 Object ast = controller.getCurrentAst(); 76 if (ast == null) { 77 ast = pc.getBackupAst(); 78 isBackup = true; 79 } 226 boolean precede = collectInfo(controller, offset, viewer); 227 if (!precede) { 228 return new ICompletionProposal[0]; 229 } 230 ProposalHelper proposals = new ProposalHelper(); 80 231 if (ast != null) { 81 ASTNode node = (ASTNode) locator.findNode(ast, token.getStartOffset(), token.getEndOffset()); 82 addUnitScopeProposals(list, node, prefix, offset); 83 if (!isBackup && node != null) { 84 if (!hasspace && node instanceof IAttribute 85 || node.getParent() instanceof PackageDefinition 86 || node.getParent() instanceof Program) { 87 for (String key:keywords) { 88 if (key.substring(0, key.length() - 1).startsWith(prefix)) { 89 SourceProposal proposal = new SourceProposal(key, prefix, offset); 90 list.add(proposal); 232 if (ancestors.size() > 0) { 233 IAst ancestor = ancestors.get(0); 234 if (ancestor instanceof PackageDefinition) { 235 PackageDefinition packdef = (PackageDefinition)ancestor; 236 if (packdef.getBody() == null || offset < packdef.getBody().getLeftIToken().getStartOffset()+offsetDiff) { 237 // in package header 238 IName nameNode = packdef.getName(); 239 String packName = nameNode == null ? "" : nameNode.toString(); 240 int startOffset = nameNode.getLeftIToken().getStartOffset(); 241 prefix = packName; 242 if (offset > nameNode.getLeftIToken().getStartOffset() + packName.length()) { 243 try { 244 prefix = viewer.getDocument().get(startOffset, offset - startOffset); 245 } catch (Exception e) { 246 AS3Plugin.getDefault().debug("error fetching real name",e); 247 } 91 248 } 249 String expectedName = getExpectedPackageName(); 250 if (!packName.equals(expectedName)) 251 proposals.addSourceProposal(expectedName, (ASTNode) nameNode); 252 } else { 253 proposals.addUnitScopeProposals(node); 92 254 } 93 } 94 } 95 } 96 // if prefix is at least one char show template proposals 255 } else { 256 proposals.addUnitScopeProposals(node); 257 } 258 } else { 259 // parent is ast 260 } 261 } 97 262 if (prefix.length() > 0) { 98 AS3TemplateCompletionProcessor templateProcessor = new AS3TemplateCompletionProcessor(); 99 ICompletionProposal[] templateProposals = templateProcessor.computeCompletionProposals( 100 viewer, offset); 101 for (ICompletionProposal prop:templateProposals) 102 list.add(prop); 103 } 104 Collections.sort(list, new ASProposalComparator()); 105 return list.toArray(new ICompletionProposal[list.size()]); 106 } 107 private void addUnitScopeProposals(ArrayList<ICompletionProposal> list, ASTNode node, 108 String prefix, int offset) { 109 SymbolTable table = SymbolTable.getEnclosing(node); 110 if (table != null) { 111 List<String> allKeys = table.getAllKeys(null); 112 for (String key:allKeys) { 263 proposals.addKeywordProposals(); 264 proposals.addTemplateProposals(viewer); 265 } 266 return proposals.getResult(); 267 } 268 public static final Comparator<ICompletionProposal> ProposalComparator = new Comparator<ICompletionProposal>() { 269 public int compare(ICompletionProposal p1, ICompletionProposal p2) { 270 return p1.getDisplayString().compareTo(p2.getDisplayString()); 271 } 272 }; 273 private class ProposalHelper implements AS3Parsersym { 274 ArrayList<ICompletionProposal> result = new ArrayList<ICompletionProposal>(); 275 276 void addUnitScopeProposals(ASTNode node) { 277 SymbolTable table = SymbolTable.getEnclosing(node); 278 if (table == null) return; 279 for (String key:table.getAllKeys(null)) { 113 280 String name = table.cleanName(key); 114 281 if (name.startsWith(prefix)) { 115 282 IAst ast = table.findDeclaration(key); 116 list.add(new AS3SourceProposal(name, prefix, offset, ast)); 117 } 118 } 119 } 120 } 121 122 public class ASProposalComparator implements Comparator<ICompletionProposal> { 123 public int compare(ICompletionProposal p1, ICompletionProposal p2) { 124 return p1.getDisplayString().compareTo(p2.getDisplayString()); 283 result.add(new AS3SourceProposal(name, prefix, offset, ast)); 284 } 285 } 286 } 287 void addSourceProposal(String packageName, ASTNode node) { 288 result.add(new AS3SourceProposal(packageName, prefix, offset, node)); 289 } 290 void addKeywordProposals() { 291 for (String key:Sym.getKeyWords()) { 292 if (!key.equals(prefix) && key.startsWith(prefix)) { 293 SourceProposal proposal = new SourceProposal(key, prefix, offset); 294 result.add(proposal); 295 } 296 } 297 } 298 void addTemplateProposals(ITextViewer viewer) { 299 AS3TemplateCompletionProcessor processor = new AS3TemplateCompletionProcessor(); 300 result.addAll(processor.computeCompletionProposalList(viewer, offset, prefix)); 301 } 302 ICompletionProposal[] getResult() { 303 Collections.sort(result, ProposalComparator); 304 return result.toArray(new ICompletionProposal[result.size()]); 305 } 306 } 307 public static class Sym implements AS3Parsersym { 308 private static String[] keywords = null; 309 310 public static String[] getKeyWords() { 311 if (keywords == null) 312 keywords = createKeywords(); 313 return keywords; 314 } 315 316 public static boolean isKeyword(IToken t) { 317 int kind = t.getKind(); 318 if (kind > 1 && kind < orderedTerminalSymbols.length) { 319 return orderedTerminalSymbols[kind].charAt(0) > 'Z'; 320 } 321 return false; 322 } 323 324 public static String getPrefix(int o, IToken t) { 325 return t.getKind() == Sym.TK_IDENTIFIER ? 326 t.toString().substring(0, o-t.getStartOffset()) : ""; 327 } 328 329 public static boolean isWithinToken(int o, IToken t) { 330 return o >= t.getStartOffset() && o <= t.getEndOffset(); 331 } 332 333 private static String[] createKeywords() { 334 ArrayList<String> result = new ArrayList<String>(); 335 for (int i = 1; i < orderedTerminalSymbols.length; i++) { 336 if (orderedTerminalSymbols[i].charAt(0) > 'Z') 337 result.add(orderedTerminalSymbols[i]); 338 } 339 return result.toArray(new String[result.size()]); 125 340 } 126 341 } -
org.axdt.as3/src/org/axdt/as3/imp/hoverHelper/AS3HoverHelper.java
r1d13b65 r87f02d1 19 19 import org.axdt.as3.AS3Plugin; 20 20 import org.axdt.as3.imp.parser.Ast.*; 21 import org.axdt.axdoc.model.AXIndexNode; 21 22 22 23 public class AS3HoverHelper extends HoverHelperBase implements IHoverHelper { … … 46 47 return "??? (BadLocationException for annotation)"; 47 48 } 48 49 // Otherwise, return a message determined directly or indirectly based 50 // on the node whose representation occurs at the given offset 51 49 Object targetNode = null; // node referenced from current hover point 50 Object helpNode = null; // node for which a help message is to be 51 Object sourceNode = null; // node at current hover point 52 // constructed 53 String msg = null; // the help message for helpNode 52 54 // Get the current AST; no AST implies no message 53 55 Object ast = parseController.getCurrentAst(); 54 if (ast == null) return null;56 if (ast != null) { 55 57 56 // Declare variables used in formulating the message 57 Object sourceNode = null; // node at current hover point 58 Object targetNode = null; // node referenced from current hover point 59 Object helpNode = null; // node for which a help message is to be 60 // constructed 61 String msg = null; // the help message for helpNode 58 // Declare variables used in formulating the message 62 59 63 // Get the node at the given offset; no node implies no message 64 ISourcePositionLocator nodeLocator = parseController.getSourcePositionLocator(); 65 sourceNode = nodeLocator.findNode(ast, offset); 66 if (sourceNode == null) return null; 60 // Get the node at the given offset; no node implies no message 61 ISourcePositionLocator nodeLocator = parseController.getSourcePositionLocator(); 62 sourceNode = nodeLocator.findNode(ast, offset); 63 if (sourceNode != null) { 64 if (fResolver == null && fLanguage != null) { 65 try { 66 fResolver = ServiceFactory.getInstance().getReferenceResolver(fLanguage); 67 } catch (Exception e) { 68 AS3Plugin.getDefault().log("Exception getting Reference Resolver service from service factory", e); 69 fResolver = null; 70 } 71 } 72 if (fResolver != null) { 73 targetNode = fResolver.getLinkTarget(sourceNode, parseController); 74 if (targetNode != null) helpNode = targetNode; 75 } 76 } 77 IDocumentationProvider docProvider = null; 78 if (fLanguage != null && true) { 79 try { 80 docProvider = ServiceFactory.getInstance().getDocumentationProvider(fLanguage); 67 81 68 // Check whether there is a reference resolver for the identified69 // source node; if so, attempt to get the node that is referenced by70 // the source node, on the assumption that the referenced node should71 // be the basis for the help message (e.g., as a decl for an identifier)72 if (true) {73 if (fResolver == null && fLanguage != null) {74 try {75 fResolver = ServiceFactory.getInstance().getReferenceResolver(fLanguage);76 82 } catch (Exception e) { 77 AS3Plugin.getDefault().log("Exception getting Reference Resolver service from service factory", e);83 AS3Plugin.getDefault().log("Exception getting Documentation Provider Service from service factory", e); 78 84 fResolver = null; 79 85 } 80 86 } 81 if (fResolver != null) { 82 targetNode = fResolver.getLinkTarget(sourceNode, parseController); 87 if (docProvider != null) { 88 msg = (docProvider != null) ? docProvider.getDocumentation(helpNode, parseController) 89 : null; 90 if (msg != null) return msg; 83 91 } 84 } 85 86 // If the target node is not null, provide help based on that; 87 // otherwise, provide help based on the source node 88 if (targetNode != null) helpNode = targetNode; 89 else helpNode = sourceNode; 90 91 // Now need to determine whether the help message should be determined 92 // based on the text represented by the node or based on some separate 93 // text provided through an IDocumentationProvider 94 95 // Check whether there is a documentation provider for the language; 96 // if so, check whether it provides documentation for the help node; 97 // if so, return that documentation 98 IDocumentationProvider docProvider = null; 99 if (fLanguage != null && true) { 100 try { 101 docProvider = ServiceFactory.getInstance().getDocumentationProvider(fLanguage); 102 103 } catch (Exception e) { 104 AS3Plugin.getDefault().log("Exception getting Documentation Provider Service from service factory", e); 105 fResolver = null; 106 } 107 } 108 if (docProvider != null) { 109 msg = (docProvider != null) ? docProvider.getDocumentation(helpNode, parseController) 110 : null; 111 if (msg != null) return msg; 112 } 113 114 // Otherwise, base the help message on the text that is represented 115 // by the help node 92 } 93 116 94 if (helpNode instanceof ASTNode) { 117 95 ASTNode def = (ASTNode) helpNode; 118 96 msg = getSubstring(parseController, def.getLeftIToken().getStartOffset(), def 119 97 .getRightIToken().getEndOffset()); 120 int maxMsgLen = 80; 121 if (msg == null || msg.length() == 0) return "No help available"; 122 else if (msg.length() <= maxMsgLen) return msg; 123 else return msg.subSequence(0, maxMsgLen) + "..."; 124 } else { 125 return "No help available"; 98 } else if (helpNode instanceof AXIndexNode) { 99 msg = helpNode.toString(); 126 100 } 101 int maxMsgLen = 80; 102 if (msg == null || msg.length() == 0) return "No help available"; 103 else if (msg.length() <= maxMsgLen) return msg; 104 else return msg.subSequence(0, maxMsgLen) + "..."; 127 105 } 128 106 -
org.axdt.as3/src/org/axdt/as3/imp/parser/AS3ParseController.java
ra106cc3 r87f02d1 5 5 import org.eclipse.core.runtime.IPath; 6 6 import org.eclipse.core.runtime.IProgressMonitor; 7 import org.eclipse. imp.services.ILanguageSyntaxProperties;7 import org.eclipse.core.runtime.NullProgressMonitor; 8 8 import org.eclipse.imp.model.ISourceProject; 9 9 import org.eclipse.imp.parser.ILexer; … … 12 12 import org.eclipse.imp.parser.IParser; 13 13 import org.eclipse.imp.parser.ISourcePositionLocator; 14 import org.eclipse.imp.parser.MessageHandlerAdapter;15 14 import org.eclipse.imp.parser.SimpleLPGParseController; 15 import org.eclipse.imp.services.ILanguageSyntaxProperties; 16 16 17 17 public class AS3ParseController extends SimpleLPGParseController implements IParseController { … … 21 21 22 22 private Object backupAst; 23 24 private int lastHash; 23 25 24 26 public AS3ParseController() { … … 63 65 */ 64 66 public Object parse(String contents, boolean scanOnly, IProgressMonitor monitor) { 67 if (monitor == null) monitor = new NullProgressMonitor(); 68 int newHash = contents.hashCode(); 69 if (lastHash == newHash) { 70 AS3Plugin.getDefault().debug("skip parsing. nothing changed"); 71 return fCurrentAst; 72 } 73 AS3Plugin.getDefault().debug("parsing "+ getPath().toString()); 74 lastHash = newHash; 65 75 PMMonitor my_monitor = new PMMonitor(monitor); 66 76 char[] contentsArray = contents.toCharArray(); -
org.axdt.as3/src/org/axdt/as3/imp/parser/AS3Parser.g
ra106cc3 r87f02d1 943 943 -- 17.2.4 Result type 944 944 ResultType ::= %empty 945 ResultType$ResultType ::= COLON$ PostfixExpression$Type 945 -- use postfixexpression because of conflict with void expression 946 ResultType$ResultType ::= COLON$ PostfixExpression$Type 946 947 ResultType$ResultType ::= COLON$ void$Void 947 948 -
org.axdt.as3/src/org/axdt/as3/imp/parser/SymbolTableVisitor.java
r01bd3b5 r87f02d1 17 17 import org.axdt.as3.imp.parser.Ast.FunctionExpression; 18 18 import org.axdt.as3.imp.parser.Ast.IAttributeExpression; 19 import org.axdt.as3.imp.parser.Ast.ImportDirective; 20 import org.axdt.as3.imp.parser.Ast.InterfaceDefinition; 21 import org.axdt.as3.imp.parser.Ast.Name; 22 import org.axdt.as3.imp.parser.Ast.PackageDefinition; 19 23 import org.axdt.as3.imp.parser.Ast.PlainParameter; 20 24 import org.axdt.as3.imp.parser.Ast.RestParameter; 21 25 import org.axdt.as3.imp.parser.Ast.VariableBinding; 22 26 import org.axdt.as3.imp.parser.Ast.VariableDefinition; 27 import org.axdt.axdoc.model.AXIndex; 28 import org.axdt.axdoc.model.AXIndexNode; 29 import org.axdt.axdoc.util.Index0r; 23 30 24 31 public class SymbolTableVisitor extends AbstractVisitor { … … 27 34 private final ILexStream lex; 28 35 private final AS3Parser parser; 36 private Index0r index0r; 29 37 30 38 public SymbolTableVisitor(AS3Parser parser) { … … 32 40 this.lex = prs.getILexStream(); 33 41 this.parser = parser; 42 index0r = Index0r.getInstance(); 34 43 } 35 44 … … 78 87 } 79 88 89 @Override 90 public boolean visit(PackageDefinition n) { 91 // check if name corresponds with folder names 92 if (n.getName() != null) { 93 Name name = (Name) n.getName(); 94 String fileName = parser.getIPrsStream().getFileName(); 95 String expectedFolder = name.toString().replace('.', '/')+"/"; 96 String[] split = fileName.split("/"+expectedFolder); 97 if (split.length!= 2) 98 emitError(name, "package names match the folder structure."); 99 // fill declaration with false 100 Name current = name; 101 while (current!=null) { 102 current.getIdent().setDeclaration(Boolean.FALSE); 103 current = current.getQualifier() instanceof Name ? 104 (Name)current.getQualifier() : null; 105 } 106 } 107 // TODO check if split[0] is a valid source path 108 return true; 109 } 110 public boolean visit(ImportDirective n) { 111 Name name = (Name) n.getName(); 112 boolean onDemand = n.getOnDemand()!=null; 113 if (name.getQualifier()==null||onDemand) { 114 if (onDemand) { 115 AXIndex[] findPackage = index0r.findPackage(name.toString()); 116 if (findPackage.length==1) 117 name.getIdent().setDeclaration(findPackage[0]); 118 else if (findPackage.length>1) 119 name.getIdent().setDeclaration(findPackage); 120 else emitError(name, "could not resolve import"); 121 } else { 122 // does anyone want to import toplevel members ? 123 emitError(name, "unused import. toplevel members can be used without import?!"); 124 } 125 } else { 126 Name qualifier = (Name) name.getQualifier(); 127 AXIndexNode[] findMember = index0r.findMember(qualifier.toString(), name.getIdent().toString()); 128 if (findMember.length==1) 129 name.getIdent().setDeclaration(findMember[0]); 130 else if (findMember.length>1) 131 name.getIdent().setDeclaration(findMember); 132 else emitError(name, "could not resolve import"); 133 while (qualifier != null) { 134 qualifier.getIdent().setDeclaration(Boolean.TRUE); 135 qualifier = qualifier.getQualifier() instanceof Name ? 136 (Name) qualifier.getQualifier() : null; 137 } 138 } 139 return false; 140 } 80 141 public boolean visit(ClassDefinition n) { 81 142 n.setSymbolTable(pushNewTable(n.getClass())); 143 Name name = (Name) n.getName(); 144 checkTypeName(name); 145 checkPackageDirectiveName(name); 82 146 return true; 83 147 } … … 85 149 public void endVisit(ClassDefinition n) { 86 150 parser.symbolTableStack.pop(); 151 } 152 153 @Override 154 public boolean visit(InterfaceDefinition n) { 155 Name name = (Name) n.getName(); 156 checkTypeName(name); 157 checkPackageDirectiveName(name); 158 return true; 159 } 160 private void checkTypeName(Name name) { 161 if (name.getQualifier()!=null) 162 emitError(name, "type names are not qualified. the package name belongs in the package declaration"); 163 name.getIdent().setDeclaration(Boolean.FALSE); 164 } 165 private void checkPackageDirectiveName(Name name) { 166 IAst grandp = name; 167 while (grandp != null) { 168 grandp = grandp.getParent(); 169 if (grandp instanceof PackageDefinition) 170 break; 171 } 172 if (grandp != null) { 173 String fileName = parser.getIPrsStream().getFileName(); 174 String nameString = name.getIdent().toString(); 175 if (!fileName.endsWith(nameString+".as")) 176 emitError(name, "name should match the file name"); 177 } 87 178 } 88 179 -
org.axdt.as3/src/org/axdt/as3/imp/referenceResolvers/AS3ReferenceResolver.java
rc6b669e r87f02d1 3 3 import lpg.runtime.IAst; 4 4 5 import org.axdt.as3.imp.parser.AS3Parser; 6 import org.axdt.as3.imp.parser.SymbolTable; 7 import org.axdt.as3.imp.parser.Ast.IName; 8 import org.axdt.as3.imp.parser.Ast.Ident; 9 import org.axdt.axdoc.model.AXIndex; 10 import org.axdt.axdoc.util.Index0r; 5 11 import org.eclipse.imp.language.ILanguageService; 6 12 import org.eclipse.imp.parser.IParseController; 7 13 import org.eclipse.imp.parser.SimpleLPGParseController; 8 14 import org.eclipse.imp.services.IReferenceResolver; 9 10 import org.axdt.as3.imp.parser.AS3Parser;11 import org.axdt.as3.imp.parser.SymbolTable;12 import org.axdt.as3.imp.parser.Ast.*;13 15 14 16 public class AS3ReferenceResolver implements IReferenceResolver, ILanguageService { … … 22 24 */ 23 25 public String getLinkText(Object node) { 24 // TODO: Replace the call to super.getLinkText(..) with an 25 // implementation suitable to you language and link types 26 return node.toString(); 26 String linkText = node.toString(); 27 return linkText; 27 28 } 28 29 … … 32 33 */ 33 34 public Object getLinkTarget(Object node, IParseController controller) { 34 // START_HERE35 // Replace the given implementation with an implementation36 // that is suitable to you language and link types37 // NOTE: The code shown in this method body works with the38 // example grammar used in the SAFARI language-service templates.39 // It may be adaptable for use with other languages. HOWEVER,40 // this particular code is not essential to reference resolvers41 // in general, and the user should provide an implementation42 // that is appropriate to the language and AST structure for43 // which the service is being defined.44 35 Object currentAst = controller.getCurrentAst(); 45 if (currentAst != null && node instanceof Ident) { 36 if (currentAst == null) return null; 37 // every link is based on an ident for now 38 if (node instanceof Ident) { 46 39 Ident id = (Ident) node; 47 AS3Parser parser = (AS3Parser) ((SimpleLPGParseController) controller).getParser(); 48 SymbolTable symtab = parser.getEnclosingSymbolTable(id); 49 if (id.getDeclaration() != null) { 50 return id.getDeclaration(); 40 Object decl = id.getDeclaration(); 41 if (decl != null) return decl; 42 IAst parent = id.getParent(); 43 String stringId = id.toString(); 44 Index0r index0r = Index0r.getInstance(); 45 if (parent instanceof IName) { 46 stringId = parent.toString(); 47 AXIndex[] indexes = index0r.findPackage(stringId); 48 if (indexes.length > 0) { 49 id.setDeclaration(indexes[0]); 50 return indexes[0]; 51 } 51 52 } 52 IAst declaration = symtab.findDeclaration(id.toString()); 53 if (declaration != null) { 54 id.setDeclaration(declaration); 55 return declaration; 53 // find local declaration 54 decl = lookInSymbolTable(controller,(IAst) node,stringId); 55 if (decl != null) { 56 id.setDeclaration(decl); 57 return decl; 56 58 } 59 System.err.println(stringId); 57 60 } 58 61 return null; 59 62 } 63 64 private Object lookInSymbolTable(IParseController controller, IAst node, String stringId) { 65 AS3Parser parser = (AS3Parser) ((SimpleLPGParseController) controller).getParser(); 66 SymbolTable symtab = parser.getEnclosingSymbolTable(node); 67 return symtab.findDeclaration(stringId); 68 } 69 60 70 } -
org.axdt.as3/src/org/axdt/as3/preferences/AS3Preferences.java
rfc56e42 r87f02d1 4 4 import org.axdt.preferences.AbstractPreferences; 5 5 import org.eclipse.core.resources.IContainer; 6 import org.eclipse.core.resources.IFolder; 6 7 import org.eclipse.core.resources.IResource; 7 8 import org.eclipse.jface.preference.IPreferenceStore; … … 72 73 String sourcePaths = store.getString(AS3Preferences.SOURCE_PATHS); 73 74 String[] split = sourcePaths.split("[,; ]"); 74 I Container[] paths = new IContainer[split.length];75 IFolder[] paths = new IFolder[split.length]; 75 76 for (int i = 0; i < split.length; i++) { 76 77 paths[i] = res.getProject().getFolder(split[i]); 78 // TODO implement when imp model is done 79 // try { 80 // ModelFactory.create(paths[i]); 81 // } catch (ModelException e) { 82 // AS3Plugin.getDefault().log("error creating source folder",e); 83 // } 77 84 } 78 85 return paths; … … 82 89 if (res == null || res.getProject() == null) 83 90 throw new IllegalArgumentException("A project resource must be specified"); 84 return res.getProject().getFolder(getDeployPathString(res)); 91 IFolder folder = res.getProject().getFolder(getDeployPathString(res)); 92 // TODO implement when imp model is done 93 // try { 94 // ModelFactory.create(folder); 95 // } catch (ModelException e) { 96 // AS3Plugin.getDefault().log("error creating source folder",e); 97 // } 98 return folder; 85 99 } 86 100 -
org.axdt.as3/src/org/axdt/as3/templates/AS3TemplateCompletionProcessor.java
rc6b669e r87f02d1 65 65 return (ICompletionProposal[]) matches.toArray(new ICompletionProposal[matches.size()]); 66 66 } 67 67 68 68 public List<TemplateProposal> computeCompletionProposalList(ITextViewer viewer, int offset) { 69 return computeCompletionProposalList(viewer, offset, null); 70 } 71 72 public List<TemplateProposal> computeCompletionProposalList( 73 ITextViewer viewer, int offset, String prefix) { 69 74 ITextSelection selection = (ITextSelection) viewer.getSelectionProvider().getSelection(); 70 75 … … 73 78 offset = selection.getOffset() + selection.getLength(); 74 79 75 String prefix = extractPrefix(viewer, offset); 80 if (prefix == null) { 81 prefix = extractPrefix(viewer, offset); 82 } 76 83 Region region = new Region(offset - prefix.length(), prefix.length()); 77 84 TemplateContext context = createContext(viewer, region); -
org.axdt.axdoc.model/.classpath
r79dd699 r87f02d1 2 2 <classpath> 3 3 <classpathentry kind="src" path="src"/> 4 <classpathentry exported="true" kind="lib" path="tagsoup-1.2.jar"/>5 4 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> 6 5 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> -
org.axdt.axdoc.model/META-INF/MANIFEST.MF
r79dd699 r87f02d1 4 4 Bundle-SymbolicName: org.axdt.axdoc.model;singleton:=true 5 5 Bundle-Version: 0.0.6.0 6 Bundle-ClassPath: ., 7 tagsoup-1.2.jar 6 Bundle-ClassPath: . 8 7 Bundle-Vendor: %providerName 9 8 Bundle-Localization: plugin … … 13 12 org.eclipse.emf.ecore.xmi 14 13 Bundle-ActivationPolicy: lazy 15 Export-Package: org.axdt.axdoc,14 Export-Package: 16 15 org.axdt.axdoc.model, 17 16 org.axdt.axdoc.model.util -
org.axdt.axdoc.model/build.properties
r79dd699 r87f02d1 9 9 META-INF/,\ 10 10 plugin.xml,\ 11 plugin.properties,\ 12 tagsoup-1.2.jar 11 plugin.properties 13 12 jars.compile.order = . 14 13 source.. = src/ -
org.axdt.axdoc.model/model/AXDoc.ecore
r79dd699 r87f02d1 43 43 <eParameters name="part" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> 44 44 </eOperations> 45 <eOperations name="getOrCreatePackage" eType="#//AXPackage"/> 45 46 <eStructuralFeatures xsi:type="ecore:EReference" name="reference" eType="#//AXPackage"/> 46 47 <eStructuralFeatures xsi:type="ecore:EAttribute" name="level" eType="#//AXLevel" -
org.axdt.axdoc.model/model/AXDocXML.xsd
r79dd699 r87f02d1 1 <?xml version="1.0" encoding="UTF-8" ?>1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 2 <xsd:schema xmlns:axdoc="http://axdt.org/axdoc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://axdt.org/axdoc"> 3 3 <xsd:simpleType name="AXLevel"> -
org.axdt.axdoc.model/src/org/axdt/axdoc/model/AXIndex.java
r79dd699 r87f02d1 147 147 AXIndex createIndex(String part); 148 148 149 /** 150 * <!-- begin-user-doc --> 151 * <!-- end-user-doc --> 152 * @model kind="operation" 153 * @generated 154 */ 155 AXPackage getOrCreatePackage(); 156 149 157 } // AXIndex -
org.axdt.axdoc.model/src/org/axdt/axdoc/model/impl/AXDocPackageImpl.java
r79dd699 r87f02d1 713 713 IS_ORDERED); 714 714 715 addEOperation(axIndexEClass, this.getAXPackage(), "getOrCreatePackage", 716 0, 1, IS_UNIQUE, IS_ORDERED); 717 715 718 initEClass(axRootEClass, AXRoot.class, "AXRoot", !IS_ABSTRACT, 716 719 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); -
org.axdt.axdoc.model/src/org/axdt/axdoc/model/impl/AXIndexImpl.java
r79dd699 r87f02d1 17 17 import org.axdt.axdoc.model.AXPackage; 18 18 import org.axdt.axdoc.model.AXRoot; 19 import org.axdt.axdoc.model.util.AXUtil; 19 20 import org.eclipse.emf.common.notify.Notification; 20 21 import org.eclipse.emf.common.notify.NotificationChain; 21 22 import org.eclipse.emf.common.util.EList; 23 import org.eclipse.emf.common.util.URI; 22 24 import org.eclipse.emf.ecore.EClass; 23 25 import org.eclipse.emf.ecore.InternalEObject; … … 506 508 return getParent(); 507 509 } 510 511 /** 512 * <!-- begin-user-doc --> 513 * <!-- end-user-doc --> 514 */ 515 public AXPackage getOrCreatePackage() { 516 AXPackage pack = getReference(); 517 if (pack == null) { 518 pack = AXDocFactory.eINSTANCE.createAXPackage(); 519 pack.setName(getName()); 520 URI uri = eResource().getURI().trimSegments(1).appendSegment( 521 getId() + ".axdoc"); 522 AXUtil.getResource(eResource().getResourceSet(), pack, uri 523 .toString()); 524 setReference(pack); 525 } 526 return pack; 527 } 508 528 } //AXIndexImpl -
org.axdt.axdoc.model/src/org/axdt/axdoc/model/util/AXUtil.java
r79dd699 r87f02d1 62 62 ResourceSet set = rootNode.eResource().getResourceSet(); 63 63 for (Resource res : set.getResources()) { 64 res.setURI(URI.createURI(path+res.getURI().lastSegment()));65 64 res.save(null); 66 65 } … … 69 68 return createRoot(null, url, basePath); 70 69 } 71 public static AXRoot createRoot(String name, String url, String basePath) {70 public static AXRoot createRoot(String name, String url, String resourceUrl) { 72 71 AXRoot root = factory.createAXRoot(); 73 72 root.setName(name); 74 73 root.setUrl(url); 75 74 ResourceSet set = xmlProcessor.createResourceSet(); 76 getResource(set, root, basePath.concat("root-index.axdoc.xml"));75 getResource(set, root, resourceUrl); 77 76 return root; 78 77 } -
org.axdt.axdoc.test/.settings/org.eclipse.jdt.core.prefs
r9a9ef10 r87f02d1 1 # Tue May 12 03:20:09 CEST 20091 #Fri May 29 00:33:29 CEST 2009 2 2 eclipse.preferences.version=1 3 3 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -
org.axdt.axdoc.test/META-INF/MANIFEST.MF
r79dd699 r87f02d1 1 1 Manifest-Version: 1.0 2 2 Bundle-ManifestVersion: 2 3 Bundle-Name: Test Fragment3 Bundle-Name: %pluginName 4 4 Bundle-SymbolicName: org.axdt.axdoc.test 5 5 Bundle-Version: 0.0.6.0 6 Bundle-Vendor: http://axdt.org 7 Fragment-Host: org.axdt.axdoc.model 6 Bundle-Vendor: %providerName 8 7 Bundle-RequiredExecutionEnvironment: J2SE-1.5 9 Require-Bundle: org.junit 8 Require-Bundle: org.axdt.axdoc, 9 org.axdt.axdoc.model, 10 org.junit -
org.axdt.axdoc.test/plugin.properties
r9a9ef10 r87f02d1 5 5 6 6 pluginName = AXDoc Tests 7 providerName = www.example.org7 providerName = http://axdt.org -
org.axdt.axdoc.test/src/org/axdt/axdoc/AXDocAllTest.java
r79dd699 r87f02d1 11 11 import junit.textui.TestRunner; 12 12 13 import org.axdt.axdoc.model.AXDocTests;14 13 import org.axdt.axdoc.model.coffeetime.ASDocFormatTest; 15 14 -
org.axdt.axdoc.test/src/org/axdt/axdoc/AXDocRegularTest.java
r79dd699 r87f02d1 14 14 import org.axdt.axdoc.model.util.AXDocParserTest; 15 15 import org.axdt.axdoc.model.util.AXDocUtilTest; 16 import org.axdt.axdoc.util.Index0rTest; 16 17 17 18 /** … … 32 33 suite.addTestSuite(AXDocParserTest.class); 33 34 suite.addTestSuite(AXDocUtilTest.class); 35 suite.addTestSuite(Index0rTest.class); 34 36 return suite; 35 37 } -
org.axdt.axdoc.test/src/org/axdt/axdoc/model/AXIndexTest.java
r79dd699 r87f02d1 18 18 * <li>{@link org.axdt.axdoc.model.AXIndex#localIndex(java.lang.String) <em>Local Index</em>}</li> 19 19 * <li>{@link org.axdt.axdoc.model.AXIndex#createIndex(java.lang.String) <em>Create Index</em>}</li> 20 * <li>{@link org.axdt.axdoc.model.AXIndex#getOrCreatePackage() <em>Get Or Create Package</em>}</li> 20 21 * </ul> 21 22 * </p> … … 181 182 assertSame(index, getFixture().createIndex("test")); 182 183 } 184 185 /** 186 * Tests the '{@link org.axdt.axdoc.model.AXIndex#getOrCreatePackage() <em>Get Or Create Package</em>}' operation. 187 * <!-- begin-user-doc --> 188 * <!-- end-user-doc --> 189 * @see org.axdt.axdoc.model.AXIndex#getOrCreatePackage() 190 */ 191 public void testGetOrCreatePackage() { 192 } 183 193 } //AXIndexTest -
org.axdt.axdoc.test/src/org/axdt/axdoc/model/coffeetime/ASDocFormatTest.java
r79dd699 r87f02d1 12 12 import org.axdt.axdoc.model.AXLevel; 13 13 import org.axdt.axdoc.model.AXRoot; 14 import org.axdt.axdoc.model.util.AXDocParser;15 14 import org.axdt.axdoc.model.util.AXUtil; 16 import org.axdt.axdoc.model.util.HtmlLoader; 15 import org.axdt.axdoc.util.AXDocParser; 16 import org.axdt.axdoc.util.HtmlLoader; 17 17 import org.w3c.dom.Node; 18 18 -
org.axdt.axdoc.test/src/org/axdt/axdoc/model/util/AXDocParserTest.java
r79dd699 r87f02d1 7 7 import org.axdt.axdoc.model.AXLevel; 8 8 import org.axdt.axdoc.model.AXRoot; 9 import org.axdt.axdoc. model.util.AXDocParser;9 import org.axdt.axdoc.util.AXDocParser; 10 10 11 11 public class AXDocParserTest extends TestCase implements TestConstants { -
org.axdt.axdoc/src/org/axdt/axdoc/util/AXDocParser.java
r79dd699 r87f02d1 1 package org.axdt.axdoc. model.util;1 package org.axdt.axdoc.util; 2 2 3 3 import java.io.FileNotFoundException; … … 9 9 import javax.xml.xpath.XPathExpressionException; 10 10 11 import org.axdt.axdoc.model.AXDocFactory;12 11 import org.axdt.axdoc.model.AXEntry; 13 12 import org.axdt.axdoc.model.AXEntryType; 14 13 import org.axdt.axdoc.model.AXIndex; 15 14 import org.axdt.axdoc.model.AXLevel; 16 import org.axdt.axdoc.model.AXNode;17 15 import org.axdt.axdoc.model.AXPackage; 18 16 import org.axdt.axdoc.model.AXRoot; 19 17 import org.axdt.axdoc.model.AXType; 18 import org.axdt.axdoc.model.util.AXUtil; 20 19 import org.w3c.dom.DOMException; 21 20 import org.w3c.dom.Node; … … 113 112 log(2,"[DD] found ", packageIndex); 114 113 if (loadSummary) { 115 AXPackage packageNode = AXDocFactory.eINSTANCE.createAXPackage(); 116 setDoc(packageNode, item.getParentNode().getNextSibling()); 117 packageIndex.setReference(packageNode); 114 setDoc(packageIndex, item.getParentNode().getNextSibling()); 118 115 } 119 116 } else log(1,"[W] unknown link "+ loader.attr(item, "href") +" "+item.getTextContent()); … … 121 118 root.setLevel(AXLevel.PACKAGE); 122 119 } 123 public void setDoc(AX Node node, Node docNode) {120 public void setDoc(AXIndex packageIndex, Node docNode) { 124 121 if (docNode == null || docNode.getTextContent() == null) return; 125 122 String docContent = docNode.getTextContent().replaceAll("\\W+"," ").trim(); 126 123 if (docContent.trim().equals("")) return; 127 node.getAsdoc().add(docContent);124 packageIndex.getOrCreatePackage().getAsdoc().add(docContent); 128 125 } 129 126 public void parseTypeLevel(AXIndex index) { … … 171 168 log(2,"[II] Parsing types in ", index); 172 169 try { 173 AXPackage reference = (AXPackage) index.getReference();174 170 Node html = loader.load(fullUrl); 175 171 if (loadSummary) { 176 if (reference == null) {177 reference = AXDocFactory.eINSTANCE.createAXPackage();178 AXUtil.getResource(index.eResource().getResourceSet(), reference, index.getId()+".axdoc");179 reference.setName(index.getName());180 index.setReference(reference);181 }182 172 Node mainDoc = loader.eval(findMainDoc, html); 183 setDoc( reference, mainDoc);173 setDoc(index, mainDoc); 184 174 } 185 175 for (Node item:loader.eIter(findLinks, html)) { … … 222 212 // remember package detail is ia/a/i 223 213 Node parent = typeNode.isInterface() ? item.getParentNode() : item; 224 setDoc(typeNode, parent.getParentNode().getNextSibling());214 //setDoc(typeNode, parent.getParentNode().getNextSibling()); 225 215 } 226 216 ((AXPackage)index.getReference()).getTypes().add(typeNode); -
org.axdt.axdoc/src/org/axdt/axdoc/util/HtmlLoader.java
r79dd699 r87f02d1 1 package org.axdt.axdoc. model.util;1 package org.axdt.axdoc.util; 2 2 3 3 import java.io.IOException; -
org.axdt.common/src/org/axdt/common/AxdtPlugin.java
r79b60b9 r87f02d1 3 3 import java.net.URL; 4 4 5 import org.axdt.common.preferences.AxdtPreferences; 5 6 import org.eclipse.core.runtime.FileLocator; 6 7 import org.eclipse.core.runtime.Path; -
org.axdt.common/src/org/axdt/common/preferences/AxdtPreferences.java
r4efac89 r87f02d1 6 6 public class AxdtPreferences extends AbstractPreferences { 7 7 8 public static final String SHOW_DEBUG_INFO = "SHOW_DEBUG_INFO"; 8 9 private static AxdtPreferences instance; 9 10 … … 25 26 @Override 26 27 public void initializeFieldSpecs() { 27 // no global preference yet 28 add(SHOW_DEBUG_INFO, "Show &debug info in the 'Error Log' view.", false); 29 } 30 public static boolean doDebug() { 31 return getInstance().getStore().getBoolean(SHOW_DEBUG_INFO); 28 32 } 29 33 }
