Mercurial > hg > truffle
comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java @ 16909:62cfffca9be2
Truffle-DSL: some more performance optimizations.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Sat, 23 Aug 2014 19:31:18 +0200 |
parents | 23415229349b |
children | c88ab4f1f04a |
comparison
equal
deleted
inserted
replaced
16908:d3f282a9e287 | 16909:62cfffca9be2 |
---|---|
260 | 260 |
261 if (parent.getKind() == ElementKind.ENUM && f.getModifiers().contains(Modifier.STATIC)) { | 261 if (parent.getKind() == ElementKind.ENUM && f.getModifiers().contains(Modifier.STATIC)) { |
262 write(f.getSimpleName()); | 262 write(f.getSimpleName()); |
263 if (init != null) { | 263 if (init != null) { |
264 write("("); | 264 write("("); |
265 init.acceptCodeElementScanner(this, p); | 265 visitTree(init, p, f); |
266 write(")"); | 266 write(")"); |
267 } | 267 } |
268 } else { | 268 } else { |
269 Element enclosing = f.getEnclosingElement(); | 269 Element enclosing = f.getEnclosingElement(); |
270 writeModifiers(f.getModifiers()); | 270 writeModifiers(f.getModifiers()); |
290 | 290 |
291 write(" "); | 291 write(" "); |
292 write(f.getSimpleName()); | 292 write(f.getSimpleName()); |
293 if (init != null) { | 293 if (init != null) { |
294 write(" = "); | 294 write(" = "); |
295 init.acceptCodeElementScanner(this, p); | 295 visitTree(init, p, f); |
296 } | 296 } |
297 } | 297 } |
298 return null; | 298 return null; |
299 } | 299 } |
300 | 300 |
457 return null; | 457 return null; |
458 } | 458 } |
459 | 459 |
460 @Override | 460 @Override |
461 public void visitImport(CodeImport e, Void p) { | 461 public void visitImport(CodeImport e, Void p) { |
462 write("import "); | |
462 if (e.isStaticImport()) { | 463 if (e.isStaticImport()) { |
463 write("import static ").write(e.getImportString()).write(";"); | 464 write("static "); |
464 } else { | 465 } |
465 write("import ").write(e.getImportString()).write(";"); | 466 write(e.getPackageName()); |
466 } | 467 write("."); |
468 write(e.getSymbolName()); | |
469 write(";"); | |
467 } | 470 } |
468 | 471 |
469 @Override | 472 @Override |
470 public Void visitExecutable(CodeExecutableElement e, Void p) { | 473 public Void visitExecutable(CodeExecutableElement e, Void p) { |
471 for (AnnotationMirror annotation : e.getAnnotationMirrors()) { | 474 for (AnnotationMirror annotation : e.getAnnotationMirrors()) { |
505 if (e.getModifiers().contains(Modifier.ABSTRACT)) { | 508 if (e.getModifiers().contains(Modifier.ABSTRACT)) { |
506 writeLn(";"); | 509 writeLn(";"); |
507 } else if (e.getBodyTree() != null) { | 510 } else if (e.getBodyTree() != null) { |
508 writeLn(" {"); | 511 writeLn(" {"); |
509 indent(1); | 512 indent(1); |
510 e.getBodyTree().acceptCodeElementScanner(this, p); | 513 visitTree(e.getBodyTree(), p, e); |
511 dedent(1); | 514 dedent(1); |
512 writeLn("}"); | 515 writeLn("}"); |
513 } else if (e.getBody() != null) { | 516 } else if (e.getBody() != null) { |
514 write(" {"); | 517 write(" {"); |
515 write(e.getBody()); | 518 write(e.getBody()); |
520 writeEmptyLn(); | 523 writeEmptyLn(); |
521 return null; | 524 return null; |
522 } | 525 } |
523 | 526 |
524 @Override | 527 @Override |
525 public void visitTree(CodeTree e, Void p) { | 528 public void visitTree(CodeTree e, Void p, Element enclosingElement) { |
526 CodeTreeKind kind = e.getCodeKind(); | 529 CodeTreeKind kind = e.getCodeKind(); |
527 | 530 |
528 switch (kind) { | 531 switch (kind) { |
529 case COMMA_GROUP: | 532 case COMMA_GROUP: |
530 List<CodeTree> children = e.getEnclosedElements(); | 533 List<CodeTree> children = e.getEnclosedElements(); |
531 for (int i = 0; i < children.size(); i++) { | 534 if (children != null) { |
532 children.get(i).acceptCodeElementScanner(this, p); | 535 for (int i = 0; i < children.size(); i++) { |
533 if (i < e.getEnclosedElements().size() - 1) { | 536 visitTree(children.get(i), p, enclosingElement); |
534 write(", "); | 537 if (i < e.getEnclosedElements().size() - 1) { |
538 write(", "); | |
539 } | |
535 } | 540 } |
536 } | 541 } |
537 break; | 542 break; |
538 case GROUP: | 543 case GROUP: |
539 for (CodeTree tree : e.getEnclosedElements()) { | 544 super.visitTree(e, p, enclosingElement); |
540 tree.acceptCodeElementScanner(this, p); | |
541 } | |
542 break; | 545 break; |
543 case INDENT: | 546 case INDENT: |
544 indent(1); | 547 indent(1); |
545 for (CodeTree tree : e.getEnclosedElements()) { | 548 super.visitTree(e, p, enclosingElement); |
546 tree.acceptCodeElementScanner(this, p); | |
547 } | |
548 dedent(1); | 549 dedent(1); |
549 break; | 550 break; |
550 case NEW_LINE: | 551 case NEW_LINE: |
551 writeLn(); | 552 writeLn(); |
552 break; | 553 break; |
557 write("null"); | 558 write("null"); |
558 } | 559 } |
559 break; | 560 break; |
560 case STATIC_FIELD_REFERENCE: | 561 case STATIC_FIELD_REFERENCE: |
561 if (e.getString() != null) { | 562 if (e.getString() != null) { |
562 write(imports.createStaticFieldReference(e, e.getType(), e.getString())); | 563 write(imports.createStaticFieldReference(enclosingElement, e.getType(), e.getString())); |
563 } else { | 564 } else { |
564 write("null"); | 565 write("null"); |
565 } | 566 } |
566 break; | 567 break; |
567 case STATIC_METHOD_REFERENCE: | 568 case STATIC_METHOD_REFERENCE: |
568 if (e.getString() != null) { | 569 if (e.getString() != null) { |
569 write(imports.createStaticMethodReference(e, e.getType(), e.getString())); | 570 write(imports.createStaticMethodReference(enclosingElement, e.getType(), e.getString())); |
570 } else { | 571 } else { |
571 write("null"); | 572 write("null"); |
572 } | 573 } |
573 break; | 574 break; |
574 case TYPE: | 575 case TYPE: |
575 write(useImport(e, e.getType())); | 576 write(useImport(enclosingElement, e.getType())); |
576 break; | 577 break; |
577 default: | 578 default: |
578 assert false; | 579 assert false; |
579 return; | 580 return; |
580 } | 581 } |
674 | 675 |
675 int end = Math.min(i + nextSize, string.length()); | 676 int end = Math.min(i + nextSize, string.length()); |
676 | 677 |
677 // TODO(CH): fails in normal usage - output ok though | 678 // TODO(CH): fails in normal usage - output ok though |
678 // assert lineLength + (end - i) + 2 < MAX_LINE_LENGTH; | 679 // assert lineLength + (end - i) + 2 < MAX_LINE_LENGTH; |
679 | 680 write("\""); |
680 write("\"" + string.substring(i, end) + "\""); | 681 write(string.substring(i, end)); |
682 write("\""); | |
681 size = nextSize; | 683 size = nextSize; |
682 } | 684 } |
683 | 685 |
684 return ""; | 686 return ""; |
685 } else if (!Character.isAlphabetic(firstCharacter) && firstCharacter != '+') { | 687 } else if (!Character.isAlphabetic(firstCharacter) && firstCharacter != '+') { |