Changeset 1198
- Timestamp:
- 06/29/08 11:58:45 (2 months ago)
- Files:
-
- trunk/descent.core/META-INF/MANIFEST.MF (modified) (1 diff)
- trunk/descent.core/src/descent/core/IEvaluationResult.java (modified) (2 diffs)
- trunk/descent.core/src/descent/core/IStructLiteral.java (added)
- trunk/descent.core/src/descent/core/IType.java (modified) (1 diff)
- trunk/descent.core/src/descent/core/dom/CompilationUnitResolver.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java (modified) (4 diffs)
- trunk/descent.core/src/descent/internal/codeassist/EvaluationEngine.java (modified) (4 diffs)
- trunk/descent.core/src/descent/internal/codeassist/EvaluationResult.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/complete/CompletionParser.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/ISourceElementRequestor.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/SourceElementParser.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/lookup/ModuleBuilder.java (modified) (24 diffs)
- trunk/descent.core/src/descent/internal/compiler/lookup/SemanticRest.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/AggregateDeclaration.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/AttribDeclaration.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/ClassDeclaration.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/CompoundStatement.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/DeclarationExp.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/FuncDeclaration.java (modified) (4 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/Import.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/Module.java (modified) (13 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/SemanticContext.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/TemplateDeclaration.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/TemplateMixin.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/core/CompilationUnitElementInfo.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/core/CompilationUnitStructureRequestor.java (modified) (9 diffs)
- trunk/descent.core/src/descent/internal/core/SourceType.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/core/SourceTypeElementInfo.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/formatter/CodeFormatterVisitor.java (modified) (2 diffs)
- trunk/descent.debug.core/META-INF/MANIFEST.MF (modified) (1 diff)
- trunk/descent.debug.ui/META-INF/MANIFEST.MF (modified) (1 diff)
- trunk/descent.launching/META-INF/MANIFEST.MF (modified) (1 diff)
- trunk/descent.tests/AllWorkbenchTests.java (modified) (2 diffs)
- trunk/descent.tests/descent/tests/lookup/Lookup_Test.java (modified) (1 diff)
- trunk/descent.ui-feature/feature.xml (modified) (1 diff)
- trunk/descent.ui.astviewer/META-INF/MANIFEST.MF (modified) (1 diff)
- trunk/descent.ui.metrics/META-INF/MANIFEST.MF (modified) (1 diff)
- trunk/descent.ui/META-INF/MANIFEST.MF (modified) (1 diff)
- trunk/descent.ui/icons/full/obj16/classf_obj.gif (modified) (previous)
- trunk/descent.ui/src/descent/internal/ui/text/JavaPartitionScanner.java (modified) (4 diffs)
- trunk/descent.ui/src/descent/internal/ui/text/java/hover/JavaEvaluateHover.java (modified) (1 diff)
- trunk/descent.ui/src/descent/ui/JavaElementLabels.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/descent.core/META-INF/MANIFEST.MF
r1149 r1198 3 3 Bundle-Name: %pluginName 4 4 Bundle-SymbolicName: descent.core;singleton:=true 5 Bundle-Version: 0.5. 2.200805015 Bundle-Version: 0.5.3.20080622 6 6 Bundle-Activator: descent.core.JavaCore 7 7 Bundle-Vendor: %providerName trunk/descent.core/src/descent/core/IEvaluationResult.java
r1165 r1198 170 170 * An array result (which is not char[], dchar[] or wchar[]). 171 171 * {@link #getValue()} can be safely cast to {@link IEvaluationResult[]}. 172 * TODO: implement this173 172 */ 174 173 int ARRAY = CREAL + 1; … … 179 178 */ 180 179 int COMPILATION_UNIT = ARRAY + 1; 180 181 /** 182 * A struct literal result. 183 * {@link #getValue()} can be safely cast to IStructLiteral. 184 */ 185 int STRUCT_LITERAL = COMPILATION_UNIT + 1; 181 186 182 187 /** trunk/descent.core/src/descent/core/IType.java
r1089 r1198 1074 1074 */ 1075 1075 String[][] resolveType(String typeName, WorkingCopyOwner owner) throws JavaModelException; 1076 1077 /** 1078 * Determines whether this type was declared like "class Bar;", that 1079 * is, it is just a forward declaration definition. 1080 */ 1081 boolean isForwardDeclaration() throws JavaModelException; 1076 1082 } trunk/descent.core/src/descent/core/dom/CompilationUnitResolver.java
r1191 r1198 45 45 46 46 private final static boolean RESOLVE = true; 47 private final static boolean STATS = false;47 private final static boolean STATS = true; 48 48 49 49 public static class ParseResult { trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java
r1195 r1198 433 433 434 434 time = System.currentTimeMillis() - time; 435 //System.out.println("Completion took " + time + " milliseconds to complete.");435 System.out.println("Completion took " + time + " milliseconds to complete."); 436 436 } 437 437 } … … 717 717 doSemantic(); 718 718 719 node.semantic(Scope.createGlobal(node.mod, semanticContext), semanticContext); 720 node.mod.consumeRestStructure(); 721 node.mod.consumeRest(); 722 719 723 if (node.mod != null) { 720 724 if (node.selectiveName == null) { … … 1375 1379 includesFilter = 0; 1376 1380 1381 wantOverrides = false; 1377 1382 if (wantOverrides) { 1378 1383 List<FuncDeclaration> funcs = new ArrayList<FuncDeclaration>(); … … 2285 2290 if (currentName.length == 0 || match(currentName, ident)) { 2286 2291 if (member.getSignature() == null) { 2292 member.consumeRest(); 2287 2293 member.getSignature(); 2288 2294 } trunk/descent.core/src/descent/internal/codeassist/EvaluationEngine.java
r1168 r1198 16 16 import descent.internal.compiler.impl.CompilerOptions; 17 17 import descent.internal.compiler.parser.ASTDmdNode; 18 import descent.internal.compiler.parser.ArrayInitializer; 19 import descent.internal.compiler.parser.ArrayLiteralExp; 18 20 import descent.internal.compiler.parser.CallExp; 19 21 import descent.internal.compiler.parser.ComplexExp; … … 30 32 import descent.internal.compiler.parser.SemanticContext; 31 33 import descent.internal.compiler.parser.StringExp; 34 import descent.internal.compiler.parser.StructLiteralExp; 32 35 import descent.internal.compiler.parser.Type; 33 36 import descent.internal.compiler.parser.TypeEnum; … … 141 144 ExpInitializer expInit = (ExpInitializer) init; 142 145 evalExp(expInit.exp); 146 } else if (init.isArrayInitializer() != null) { 147 ArrayInitializer arrayInit = (ArrayInitializer) init; 148 149 IEvaluationResult[] er = new IEvaluationResult[arrayInit.value.size()]; 150 for (int i = 0; i < er.length; i++) { 151 Initializer subInit = arrayInit.value.get(i); 152 evalInit(subInit); 153 er[i] = result; 154 } 155 156 result = new EvaluationResult(er, IEvaluationResult.ARRAY); 143 157 } 144 158 } … … 155 169 } else if (exp instanceof NegExp) { 156 170 // evalExp(((NegExp) exp).e1); 171 } else if (exp instanceof StructLiteralExp) { 172 StructLiteralExp sle = (StructLiteralExp) exp; 173 String name = sle.sd.ident.toChars(); 174 String[] names = new String[sle.sd.fields.size()]; 175 for (int i = 0; i < names.length; i++) { 176 names[i] = sle.sd.fields.get(i).ident.toChars(); 177 } 178 IEvaluationResult[] values = new IEvaluationResult[sle.elements.size()]; 179 for (int i = 0; i < values.length; i++) { 180 evalExp(sle.elements.get(i)); 181 values[i] = result; 182 } 183 184 StructLiteral sl = new StructLiteral(name, names, values); 185 result = new EvaluationResult(sl, IEvaluationResult.STRUCT_LITERAL); 186 } else if (exp instanceof ArrayLiteralExp) { 187 ArrayLiteralExp ale = (ArrayLiteralExp) exp; 188 189 IEvaluationResult[] er = new IEvaluationResult[ale.elements.size()]; 190 for (int i = 0; i < er.length; i++) { 191 evalExp(ale.elements.get(i)); 192 er[i] = result; 193 } 194 195 result = new EvaluationResult(er, IEvaluationResult.ARRAY); 157 196 } 158 197 } trunk/descent.core/src/descent/internal/codeassist/EvaluationResult.java
r987 r1198 23 23 @Override 24 24 public String toString() { 25 if (value instanceof IEvaluationResult[]) { 26 IEvaluationResult[] results = (IEvaluationResult[]) value; 27 28 StringBuilder sb = new StringBuilder(); 29 sb.append("["); 30 for (int i = 0; i < results.length; i++) { 31 if (i != 0) { 32 sb.append(", "); 33 } 34 sb.append(results[i]); 35 } 36 sb.append("]"); 37 return sb.toString(); 38 } 25 39 return value.toString(); 26 40 } trunk/descent.core/src/descent/internal/codeassist/complete/CompletionParser.java
r1195 r1198 900 900 @Override 901 901 protected AggregateDeclaration endAggregateDeclaration(AggregateDeclaration a) { 902 if (a instanceof ClassDeclaration && a.start < cursorLocation && cursorLocation < a.start + a.length) {903 ClassDeclaration original = (ClassDeclaration) a;904 CompletionOnClassDeclaration cc = new CompletionOnClassDeclaration(original.loc, original.ident, original.baseclasses);905 cc.members = original.members;906 cc.sourceMembers = original.sourceMembers;907 cc.isCompletingScope = true;908 909 assistNode = cc;910 return cc;911 }902 // if (a instanceof ClassDeclaration && a.start < cursorLocation && cursorLocation < a.start + a.length) { 903 // ClassDeclaration original = (ClassDeclaration) a; 904 // CompletionOnClassDeclaration cc = new CompletionOnClassDeclaration(original.loc, original.ident, original.baseclasses); 905 // cc.members = original.members; 906 // cc.sourceMembers = original.sourceMembers; 907 // cc.isCompletingScope = true; 908 // 909 // assistNode = cc; 910 // return cc; 911 // } 912 912 return super.endAggregateDeclaration(a); 913 913 } trunk/descent.core/src/descent/internal/compiler/ISourceElementRequestor.java
r1098 r1198 47 47 public char[][] superinterfaces; 48 48 public TypeParameterInfo[] typeParameters; 49 public boolean isForwardDeclaration; 49 50 } 50 51 trunk/descent.core/src/descent/internal/compiler/SourceElementParser.java
r1192 r1198 367 367 } 368 368 } 369 info.isForwardDeclaration = node.members == null; 369 370 //info.secondary = !foundType; 370 371 … … 765 766 info.nameSourceEnd = node.start + 3; // enum 766 767 } 767 768 info.isForwardDeclaration = node.members == null; 768 769 info.superinterfaces = node.memtype == null ? CharOperation.NO_CHAR_CHAR : new char[][] { getSignature(node.memtype) }; 769 770 trunk/descent.core/src/descent/internal/compiler/lookup/ModuleBuilder.java
r1168 r1198 72 72 import descent.internal.compiler.parser.VersionCondition; 73 73 import descent.internal.compiler.parser.VersionSymbol; 74 import descent.internal.core.CompilationUnit; 75 import descent.internal.core.CompilationUnitElementInfo; 74 76 import descent.internal.core.CompilerConfiguration; 75 77 import descent.internal.core.InternalSignature; … … 89 91 * Whether to make surface Module semantic. 90 92 */ 91 public boolean LAZY_MODULES = LAZY & false;93 public boolean LAZY_MODULES = true; 92 94 93 95 /* … … 135 137 * Currently doesn't work. 136 138 */ 137 public boolean LAZY_VARS = LAZY & false;139 public boolean LAZY_VARS = LAZY & true; 138 140 139 141 /* … … 162 164 * is returned normally, without skipping it. 163 165 */ 164 class State {166 public static class State { 165 167 HashtableOfCharArrayAndObject versions = new HashtableOfCharArrayAndObject(); 166 168 HashtableOfCharArrayAndObject debugs = new HashtableOfCharArrayAndObject(); … … 169 171 170 172 private final ASTNodeEncoder encoder; 171 p rivatefinal CompilerConfiguration config;173 public final CompilerConfiguration config; 172 174 173 175 /** … … 198 200 * @return the module representing the unit 199 201 */ 200 public Module build(final ICompilationUnit unit) { 202 public Module build(final ICompilationUnit unit) { 203 // long time = System.currentTimeMillis(); 204 201 205 final Module module = new Module(unit.getElementName(), new IdentifierExp(unit.getModuleName().toCharArray())); 202 206 module.setJavaElement(unit); 203 207 module.moduleName = unit.getFullyQualifiedName(); 204 208 205 if (LAZY_MODULES) { 206 module.setJavaElement(unit); 207 module.rest = new SemanticRest(new Runnable() { 208 public void run() { 209 try { 210 long time = System.currentTimeMillis(); 211 212 IPackageDeclaration[] packageDeclarations = unit.getPackageDeclarations(); 213 if (packageDeclarations.length == 1) { 214 String elementName = packageDeclarations[0].getElementName(); 215 Identifiers packages = new Identifiers(); 216 IdentifierExp name = splitName(elementName, packages); 217 module.md = new ModuleDeclaration(packages, name); 218 } 219 220 State state = new State(); 221 222 module.members = new Dsymbols(); 223 fill(module, module.members, unit.getChildren(), state); 224 225 state.surface = false; 226 227 time = System.currentTimeMillis() - time; 228 System.out.println(module.moduleName + ": " + time); 229 } catch (JavaModelException e) { 230 Util.log(e); 231 } 232 } 233 }); 234 module.rest.skipScopeCheck = true; 235 } else { 209 // if (LAZY_MODULES) { 210 // module.setJavaElement(unit); 211 // module.rest = new SemanticRest(new Runnable() { 212 // public void run() { 213 // try { 214 // IPackageDeclaration[] packageDeclarations = unit.getPackageDeclarations(); 215 // if (packageDeclarations.length == 1) { 216 // String elementName = packageDeclarations[0].getElementName(); 217 // Identifiers packages = new Identifiers(); 218 // IdentifierExp name = splitName(elementName, packages); 219 // module.md = new ModuleDeclaration(packages, name); 220 // } 221 // 222 // State state = new State(); 223 // 224 // module.members = new Dsymbols(); 225 //// fill(module, module.members, unit.getChildren(), state); 226 // 227 // state.surface = false; 228 // } catch (JavaModelException e) { 229 // Util.log(e); 230 // } 231 // } 232 // }); 233 // module.rest.skipScopeCheck = true; 234 // } else { 235 236 IPackageDeclaration[] packageDeclarations; 237 try { 238 packageDeclarations = unit.getPackageDeclarations(); 239 if (packageDeclarations.length == 1) { 240 String elementName = packageDeclarations[0].getElementName(); 241 Identifiers packages = new Identifiers(); 242 IdentifierExp name = splitName(elementName, packages); 243 module.md = new ModuleDeclaration(packages, name); 244 } 245 } catch (JavaModelException e) { 246 Util.log(e); 247 } 248 249 CompilationUnitElementInfo info = null; 250 try { 251 info = (CompilationUnitElementInfo) ((CompilationUnit) unit).getElementInfo(); 252 } catch (JavaModelException e) { 253 Util.log(e); 254 } 255 256 if (!LAZY_MODULES || "object".equals(module.moduleName) || (info != null && info.hasTopLevelCompileTimeDifficulties())) { 236 257 try { 237 IPackageDeclaration[] packageDeclarations = unit.getPackageDeclarations();238 if (packageDeclarations.length == 1) {239 String elementName = packageDeclarations[0].getElementName();240 Identifiers packages = new Identifiers();241 IdentifierExp name = splitName(elementName, packages);242 module.md = new ModuleDeclaration(packages, name);243 }244 245 258 State state = new State(); 246 259 … … 251 264 } catch (JavaModelException e) { 252 265 Util.log(e); 253 return null; 254 } 255 } 266 } 267 } else { 268 module.builder = this; 269 } 270 271 // } 272 // 273 // time = System.currentTimeMillis() - time; 274 // if (time > 10) { 275 // System.out.println("ModuleBuilder#build(" + module.moduleName + ") = " + time); 276 // } 256 277 257 278 return module; 258 279 } 259 280 260 p rivatevoid fill(Module module, Dsymbols members, IJavaElement[] elements,281 public void fill(Module module, Dsymbols members, IJavaElement[] elements, 261 282 State state) throws JavaModelException { 262 283 for(IJavaElement elem : elements) { 263 switch(elem.getElementType()) { 264 case IJavaElement.IMPORT_CONTAINER: 265 IImportContainer container = (IImportContainer) elem; 266 fillImportContainer(module, members, container, state); 267 break; 268 case IJavaElement.IMPORT_DECLARATION: 269 IImportDeclaration impDecl = ((IImportDeclaration) elem); 270 fillImportDeclaration(module, members, impDecl); 271 break; 272 case IJavaElement.FIELD: 273 IField field = (IField) elem; 274 fillField(module, members, field, state); 275 break; 276 case IJavaElement.TYPE: 277 IType type = (IType) elem; 278 fillType(module, members, type, state); 279 break; 280 case IJavaElement.METHOD: 281 IMethod method = (IMethod) elem; 282 fillMethod(module, members, method, state.surface); 283 break; 284 case IJavaElement.INITIALIZER: 285 IInitializer init = (IInitializer) elem; 286 fillInitializer(module, members, init, state); 287 break; 288 case IJavaElement.CONDITIONAL: 289 IConditional cond = (IConditional) elem; 290 fillConditional(module, members, cond, state); 291 break; 292 } 284 fill(module, members, state, elem); 285 } 286 } 287 288 public void fill(Module module, Dsymbols members, State state, IJavaElement elem) throws JavaModelException { 289 switch(elem.getElementType()) { 290 case IJavaElement.IMPORT_CONTAINER: 291 IImportContainer container = (IImportContainer) elem; 292 fillImportContainer(module, members, container, state); 293 break; 294 case IJavaElement.IMPORT_DECLARATION: 295 IImportDeclaration impDecl = ((IImportDeclaration) elem); 296 fillImportDeclaration(module, members, impDecl); 297 break; 298 case IJavaElement.FIELD: 299 IField field = (IField) elem; 300 fillField(module, members, field, state); 301 break; 302 case IJavaElement.TYPE: 303 IType type = (IType) elem; 304 fillType(module, members, type, state); 305 break; 306 case IJavaElement.METHOD: 307 IMethod method = (IMethod) elem; 308 fillMethod(module, members, method, state.surface); 309 break; 310 case IJavaElement.INITIALIZER: 311 IInitializer init = (IInitializer) elem; 312 fillInitializer(module, members, init, state); 313 break; 314 case IJavaElement.CONDITIONAL: 315 IConditional cond = (IConditional) elem; 316 fillConditional(module, members, cond, state); 317 break; 293 318 } 294 319 } … … 485 510 } 486 511 487 p rivatevoid fillType(final Module module, Dsymbols members, final IType type,512 public void fillType(final Module module, Dsymbols members, final IType type, 488 513 final State state) throws JavaModelException { 489 514 boolean surface = state.surface; … … 502 527 member.sourceBaseclasses = new BaseClasses(member.baseclasses); 503 528 } 529 if (type.isForwardDeclaration()) { 530 return; 531 } 504 532 member.members = new Dsymbols(); 505 533 fill(module, member.members, type.getChildren(), state); … … 507 535 } catch (JavaModelException e) { 508 536 Util.log(e); 509 } 537 } 510 538 }; 511 539 }); 512 540 } else { 513 541 member = new ClassDeclaration(getLoc(module, type), getIdent(type), getBaseClasses(type)); 514 member.members = new Dsymbols(); 515 fill(module, member.members, type.getChildren(), state); 516 member.sourceMembers = new Dsymbols(member.members); 542 543 if (!type.isForwardDeclaration()) { 544 member.members = new Dsymbols(); 545 fill(module, member.members, type.getChildren(), state); 546 member.sourceMembers = new Dsymbols(member.members); 547 } 517 548 } 518 549 … … 531 562 member.sourceBaseclasses = new BaseClasses(member.baseclasses); 532 563 } 564 if (type.isForwardDeclaration()) { 565 return; 566 } 533 567 member.members = new Dsymbols(); 534 568 fill(module, member.members, type.getChildren(), state); … … 543 577 member = new InterfaceDeclaration(getLoc(module, type), getIdent(type), getBaseClasses(type)); 544 578 545 member.members = new Dsymbols(); 546 fill(module, member.members, type.getChildren(), state); 547 member.sourceMembers = new Dsymbols(member.members); 579 if (!type.isForwardDeclaration()) { 580 member.members = new Dsymbols(); 581 fill(module, member.members, type.getChildren(), state); 582 member.sourceMembers = new Dsymbols(member.members); 583 } 548 584 } 549 585 … … 561 597 member.rest = new SemanticRest(new Runnable() { 562 598 public void run() { 563 member.members = new Dsymbols();564 599 try { 600 if (type.isForwardDeclaration()) { 601 return; 602 } 603 604 member.members = new Dsymbols(); 565 605 fill(module, member.members, type.getChildren(), state); 566 606 member.sourceMembers = new Dsymbols(member.members); … … 572 612 } else { 573 613 member = new StructDeclaration(getLoc(module, type), id); 574 member.members = new Dsymbols(); 575 fill(module, member.members, type.getChildren(), state); 576 member.sourceMembers = new Dsymbols(member.members); 614 615 if (!type.isForwardDeclaration()) { 616 member.members = new Dsymbols(); 617 fill(module, member.members, type.getChildren(), state); 618 member.sourceMembers = new Dsymbols(member.members); 619 } 577 620 } 578 621 … … 591 634 member.rest = new SemanticRest(new Runnable() { 592 635 public void run() { 593 member.members = new Dsymbols();594 636 try { 637 if (type.isForwardDeclaration()) { 638 return; 639 } 640 641 member.members = new Dsymbols(); 595 642 fill(module, member.members, type.getChildren(), state); 596 643 member.sourceMembers = new Dsymbols(member.members); … … 603 650 member = new UnionDeclaration(getLoc(module, type), id); 604 651 605 member.members = new Dsymbols(); 606 fill(module, member.members, type.getChildren(), state); 607 member.sourceMembers = new Dsymbols(member.members); 652 if (!type.isForwardDeclaration()) { 653 member.members = new Dsymbols(); 654 fill(module, member.members, type.getChildren(), state); 655 member.sourceMembers = new Dsymbols(member.members); 656 } 608 657 } 609 658 … … 612 661 } 613 662 } else if (type.isEnum()) { 614 IdentifierExp ident = getIdent(type); 615 616 final EnumDeclaration member; 617 618 // For anonymous enums we can do it lazily 619 if (LAZY_ENUMS && surface && ident != null) { 620 member = new EnumDeclaration(getLoc(module, type), ident, null); 621 member.rest = new SemanticRest(new Runnable() { 622 public void run() { 623 try { 624 BaseClasses baseClasses = getBaseClasses(type); 625 member.memtype = baseClasses.isEmpty() ? Type.tint32 : baseClasses.get(0).type; 626 627 member.members = new Dsymbols(); 628 for(IJavaElement sub : type.getChildren()) { 629 IField field = (IField) sub; 630 EnumMember enumMember = new EnumMember(getLoc(module, field), getIdent(field), getExpression(field)); 631 enumMember.setJavaElement(field); 632 member.members.add(enumMember); 633 } 634 member.sourceMembers = new Dsymbols(member.members); 635 } catch (JavaModelException e) { 636 Util.log(e); 637 } 638 } 639 }); 640 } else { 641 BaseClasses baseClasses = getBaseClasses(type); 642 member = new EnumDeclaration(getLoc(module, type), ident, baseClasses.isEmpty() ? Type.tint32 : baseClasses.get(0).type); 643 644 member.members = new Dsymbols(); 645 for(IJavaElement sub : type.getChildren()) { 646 IField field = (IField) sub; 647 EnumMember enumMember = new EnumMember(getLoc(module, field), getIdent(field), getExpression(field)); 648 enumMember.setJavaElement(field); 649 member.members.add(enumMember); 650 } 651 member.sourceMembers = new Dsymbols(member.members); 652 } 653 654 member.setJavaElement(type); 655 members.add(wrap(member, type)); 663 fillEnum(module, members, type, surface); 656 664 } else if (type.isTemplate()) { 657 665 final TemplateDeclaration member; … … 687 695 } 688 696 689 private void fillAnon(Module module, Dsymbols members, IType type, 697 public Dsymbol fillEnum(final Module module, Dsymbols members, final IType type, boolean surface) throws JavaModelException { 698 IdentifierExp ident = getIdent(type); 699 700 final EnumDeclaration member; 701 702 // For anonymous enums we can do it lazily 703 if (LAZY_ENUMS && surface && ident != null) { 704 member = new EnumDeclaration(getLoc(module, type), ident, null); 705 member.rest = new SemanticRest(new Runnable() { 706 public void run() { 707 try { 708 BaseClasses baseClasses = getBaseClasses(type); 709 member.memtype = baseClasses.isEmpty() ? Type.tint32 : baseClasses.get(0).type; 710 711 if (type.isForwardDeclaration()) { 712 return; 713 } 714 715 member.members = new Dsymbols(); 716 for(IJavaElement sub : type.getChildren()) { 717 IField field = (IField) sub; 718 EnumMember enumMember = new EnumMember(getLoc(module, field), getIdent(field), getExpression(field)); 719 enumMember.setJavaElement(field); 720 member.members.add(enumMember); 721 } 722 member.sourceMembers = new Dsymbols(member.members); 723 } catch (JavaModelException e) { 724 Util.log(e); 725 } 726 } 727 }); 728 } else { 729 BaseClasses baseClasses = getBaseClasses(type); 730 member = new EnumDeclaration(getLoc(module, type), ident, baseClasses.isEmpty() ? Type.tint32 : baseClasses.get(0).type); 731 732 if (!type.isForwardDeclaration()) { 733 member.members = new Dsymbols(); 734 for(IJavaElement sub : type.getChildren()) { 735 IField field = (IField) sub; 736 EnumMember enumMember = new EnumMember(getLoc(module, field), getIdent(field), getExpression(field)); 737 enumMember.setJavaElement(field); 738 member.members.add(enumMember); 739 } 740 member.sourceMembers = new Dsymbols(member.members); 741 } 742 } 743 744 member.setJavaElement(type); 745 Dsymbol sym = wrap(member, type); 746 members.add(sym); 747 return sym; 748 } 749 750 public void fillAnon(Module module, Dsymbols members, IType type, 690 751 boolean isUnion, State state) throws JavaModelException { 691 752 Dsymbols symbols = new Dsymbols(); … … 696 757 } 697 758 698 p rivatevoid fillField(Module module, Dsymbols members, final IField field, State state) throws JavaModelException {759 public void fillField(Module module, Dsymbols members, final IField field, State state) throws JavaModelException { 699 760 if (field.isVariable()) { 700 761 final VarDeclaration member; … … 747 808 } 748 809 749 p rivate voidfillImportDeclaration(Module module, Dsymbols members, IImportDeclaration impDecl) throws JavaModelException {810 public Dsymbol fillImportDeclaration(Module module, Dsymbols members, IImportDeclaration impDecl) throws JavaModelException { 750 811 String elementName = impDecl.getElementName(); 751 812 Identifiers packages = new Identifiers(); … … 772 833 } 773 834 774 members.add(wrap(imp, flags)); 835 Dsymbol sym = wrap(imp, flags); 836 members.add(sym); 837 return sym; 775 838 } 776 839 … … 788 851 } 789 852 790 p rivateLINK getLink(IInitializer init) {853 public static LINK getLink(IInitializer init) { 791 854 String name = init.getElementName(); 792 855 if ("".equals(name) || "D".equals(name)) { … … 962 1025 963 1026 964 p rivateDsymbol wrap(Dsymbol symbol, IMember member) throws JavaModelException {1027 public Dsymbol wrap(Dsymbol symbol, IMember member) throws JavaModelException { 965 1028 return wrap(symbol, member.getFlags()); 966 1029 } 967 1030 968 p rivateDsymbol wrap(Dsymbol symbol, long flags) throws JavaModelException {1031 public Dsymbol wrap(Dsymbol symbol, long flags) throws JavaModelException { 969 1032 int stc = getStorageClass(flags);
