Lines 61-66
Link Here
|
61 |
import java.io.IOException; |
61 |
import java.io.IOException; |
62 |
import java.io.StringWriter; |
62 |
import java.io.StringWriter; |
63 |
import java.lang.ref.Reference; |
63 |
import java.lang.ref.Reference; |
|
|
64 |
import java.net.URI; |
64 |
import java.util.ArrayList; |
65 |
import java.util.ArrayList; |
65 |
import java.util.Collections; |
66 |
import java.util.Collections; |
66 |
import java.util.HashMap; |
67 |
import java.util.HashMap; |
Lines 74-79
Link Here
|
74 |
import java.util.logging.Level; |
75 |
import java.util.logging.Level; |
75 |
import java.util.logging.Logger; |
76 |
import java.util.logging.Logger; |
76 |
import javax.lang.model.element.Element; |
77 |
import javax.lang.model.element.Element; |
|
|
78 |
import javax.lang.model.element.ElementKind; |
77 |
import javax.swing.text.BadLocationException; |
79 |
import javax.swing.text.BadLocationException; |
78 |
import javax.tools.JavaFileObject; |
80 |
import javax.tools.JavaFileObject; |
79 |
|
81 |
|
Lines 550-557
Link Here
|
550 |
try { |
552 |
try { |
551 |
FileObject targetFile = doCreateFromTemplate(t); |
553 |
FileObject targetFile = doCreateFromTemplate(t); |
552 |
CompilationUnitTree templateCUT = impl.getJavacTask().parse(FileObjects.nbFileObject(targetFile, targetFile.getParent())).iterator().next(); |
554 |
CompilationUnitTree templateCUT = impl.getJavacTask().parse(FileObjects.nbFileObject(targetFile, targetFile.getParent())).iterator().next(); |
|
|
555 |
CompilationUnitTree importComments = GeneratorUtilities.get(this).importComments(templateCUT, templateCUT); |
553 |
|
556 |
|
554 |
changes.put(templateCUT, t); |
557 |
changes.put(importComments, t); |
555 |
|
558 |
|
556 |
StringWriter target = new StringWriter(); |
559 |
StringWriter target = new StringWriter(); |
557 |
|
560 |
|
Lines 568-593
Link Here
|
568 |
return result; |
571 |
return result; |
569 |
} |
572 |
} |
570 |
|
573 |
|
571 |
private static String template(CompilationUnitTree cut) { |
574 |
String template(ElementKind kind) { |
572 |
if ("package-info.java".equals(cut.getSourceFile().getName())) return "Templates/Classes/package-info.java"; |
575 |
if(kind == null) { |
573 |
if (cut.getTypeDecls().isEmpty()) return "Templates/Classes/Empty.java"; |
576 |
return "Templates/Classes/Empty.java"; // NOI18N |
574 |
|
577 |
} |
575 |
switch (cut.getTypeDecls().get(0).getKind()) { |
578 |
switch (kind) { |
576 |
case CLASS: return "Templates/Classes/Class.java"; // NOI18N |
579 |
case CLASS: return "Templates/Classes/Class.java"; // NOI18N |
577 |
case INTERFACE: return "Templates/Classes/Interface.java"; // NOI18N |
580 |
case INTERFACE: return "Templates/Classes/Interface.java"; // NOI18N |
578 |
case ANNOTATION_TYPE: return "Templates/Classes/AnnotationType.java"; // NOI18N |
581 |
case ANNOTATION_TYPE: return "Templates/Classes/AnnotationType.java"; // NOI18N |
579 |
case ENUM: return "Templates/Classes/Enum.java"; // NOI18N |
582 |
case ENUM: return "Templates/Classes/Enum.java"; // NOI18N |
|
|
583 |
case PACKAGE: return "Templates/Classes/package-info.java"; // NOI18N |
580 |
default: |
584 |
default: |
581 |
Logger.getLogger(WorkingCopy.class.getName()).log(Level.SEVERE, "Cannot resolve template for {0}", cut.getTypeDecls().get(0).getKind()); |
585 |
Logger.getLogger(WorkingCopy.class.getName()).log(Level.SEVERE, "Cannot resolve template for {0}", kind); |
582 |
return "Templates/Classes/Empty.java"; |
586 |
return "Templates/Classes/Empty.java"; // NOI18N |
583 |
} |
587 |
} |
584 |
} |
588 |
} |
585 |
|
589 |
|
586 |
private static FileObject doCreateFromTemplate(CompilationUnitTree t) throws IOException { |
590 |
FileObject doCreateFromTemplate(CompilationUnitTree cut) throws IOException { |
|
|
591 |
ElementKind kind; |
592 |
if ("package-info.java".equals(cut.getSourceFile().getName())) { |
593 |
kind = ElementKind.PACKAGE; |
594 |
} else if (cut.getTypeDecls().isEmpty()) { |
595 |
kind = null; |
596 |
} else { |
597 |
switch (cut.getTypeDecls().get(0).getKind()) { |
598 |
case CLASS: |
599 |
kind = ElementKind.CLASS; |
600 |
break; |
601 |
case INTERFACE: |
602 |
kind = ElementKind.INTERFACE; |
603 |
break; |
604 |
case ANNOTATION_TYPE: |
605 |
kind = ElementKind.ANNOTATION_TYPE; |
606 |
break; |
607 |
case ENUM: |
608 |
kind = ElementKind.ENUM; |
609 |
break; |
610 |
default: |
611 |
Logger.getLogger(WorkingCopy.class.getName()).log(Level.SEVERE, "Cannot resolve template for {0}", cut.getTypeDecls().get(0).getKind()); |
612 |
kind = null; |
613 |
} |
614 |
} |
615 |
FileObject template = FileUtil.getConfigFile(template(kind)); |
616 |
return doCreateFromTemplate(template, cut.getSourceFile()); |
617 |
} |
618 |
|
619 |
FileObject doCreateFromTemplate(FileObject template, JavaFileObject sourceFile) throws IOException { |
587 |
FileObject scratchFolder = FileUtil.createMemoryFileSystem().getRoot(); |
620 |
FileObject scratchFolder = FileUtil.createMemoryFileSystem().getRoot(); |
588 |
|
621 |
|
589 |
FileObject template = FileUtil.getConfigFile(template(t)); |
|
|
590 |
|
591 |
if (template == null) { |
622 |
if (template == null) { |
592 |
return scratchFolder.createData("out", "java"); |
623 |
return scratchFolder.createData("out", "java"); |
593 |
} |
624 |
} |
Lines 598-604
Link Here
|
598 |
return scratchFolder.createData("out", "java"); |
629 |
return scratchFolder.createData("out", "java"); |
599 |
} |
630 |
} |
600 |
|
631 |
|
601 |
File pack = new File(t.getSourceFile().toUri()).getParentFile(); |
632 |
File pack = new File(sourceFile.toUri()).getParentFile(); |
602 |
|
633 |
|
603 |
while (FileUtil.toFileObject(pack) == null) { |
634 |
while (FileUtil.toFileObject(pack) == null) { |
604 |
pack = pack.getParentFile(); |
635 |
pack = pack.getParentFile(); |