Changeset 861
- Timestamp:
- 10/21/07 17:14:55 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java
r860 r861 6 6 import descent.core.CompletionProposal; 7 7 import descent.core.CompletionRequestor; 8 import descent.core.IJavaElement;9 8 import descent.core.IJavaProject; 10 9 import descent.core.IPackageFragmentRoot; … … 23 22 import descent.internal.compiler.parser.ASTDmdNode; 24 23 import descent.internal.compiler.parser.Argument; 25 import descent.internal.compiler.parser.DsymbolTable; 24 import descent.internal.compiler.parser.ClassDeclaration; 25 import descent.internal.compiler.parser.EnumDeclaration; 26 import descent.internal.compiler.parser.FuncDeclaration; 26 27 import descent.internal.compiler.parser.Global; 28 import descent.internal.compiler.parser.HashtableOfCharArrayAndObject; 29 import descent.internal.compiler.parser.InterfaceDeclaration; 30 import descent.internal.compiler.parser.LabelStatement; 27 31 import descent.internal.compiler.parser.Module; 28 32 import descent.internal.compiler.parser.SemanticContext; 33 import descent.internal.compiler.parser.StructDeclaration; 34 import descent.internal.compiler.parser.TemplateDeclaration; 29 35 import descent.internal.compiler.parser.Type; 30 36 import descent.internal.compiler.parser.TypeFunction; 37 import descent.internal.compiler.parser.UnionDeclaration; 38 import descent.internal.compiler.parser.ast.AstVisitorAdapter; 31 39 import descent.internal.compiler.util.HashtableOfObject; 32 40 import descent.internal.core.INamingRequestor; … … 249 257 250 258 private void completeGotoStatement(CompletionOnGotoStatement node) { 251 // TODO: a full semantic pass is not needed: optimize 252 doSemantic(this.module); 253 254 DsymbolTable table = node.fd.labtab; 255 if (table == null) { 256 return; 257 } 258 259 char[][] labels = table.keys(); 259 final HashtableOfCharArrayAndObject labelsMap = new HashtableOfCharArrayAndObject(); 260 module.accept(new AstVisitorAdapter() { 261 262 private FuncDeclaration func; 263 264 @Override 265 public boolean visit(FuncDeclaration node) { 266 if (inRange(node)) { 267 func = node; 268 labelsMap.clear(); 269 return true; 270 } else { 271 return false; 272 } 273 } 274 275 @Override 276 public boolean visit(LabelStatement node) { 277 if (func != null && func.start <= node.start && node.start <= func.start + func.length) { 278 labelsMap.put(node.ident.ident, this); 279 } 280 return true; 281 } 282 283 @Override 284 public boolean visit(EnumDeclaration node) { 285 return false; 286 } 287 288 @Override 289 public boolean visit(ClassDeclaration node) { 290 return inRange(node); 291 } 292 293 @Override 294 public boolean visit(InterfaceDeclaration node) { 295 return inRange(node); 296 } 297 298 @Override 299 public boolean visit(StructDeclaration node) { 300 return inRange(node); 301 } 302 303 @Override 304 public boolean visit(UnionDeclaration node) { 305 return inRange(node); 306 } 307 308 @Override 309 public boolean visit(TemplateDeclaration node) { 310 return inRange(node); 311 } 312 313 private boolean inRange(ASTDmdNode node) { 314 return node.start <= CompletionEngine.this.actualCompletionPosition && 315 CompletionEngine.this.actualCompletionPosition <= node.start + node.length; 316 } 317 318 }); 319 320 char[][] labels = labelsMap.keys(); 260 321 if (labels != null) { 261 322 char[] prefix; trunk/descent.core/src/descent/internal/compiler/parser/HashtableOfCharArrayAndObject.java
r860 r861 25 25 26 26 public HashtableOfCharArrayAndObject(int size) { 27 init(size); 28 } 29 30 public void clear() { 31 init(13); 32 } 33 34 private void init(int size) { 27 35 this.elementSize = 0; 28 36 this.threshold = size; // size represents the expected number of elements
