668 maybeChooseFileName();
669 }
670
671 public void initFile(File file) {
672 assert(this.file == null); // set-once
673 if (file == null) {
674 // Build a trivial stub.
675 file = newStub(canonicalFileName());
676 }
677 this.file = file;
678 assert(file.isClassStub());
679 file.stubClass = this;
680 maybeChooseFileName();
681 }
682
683 public void maybeChooseFileName() {
684 if (thisClass == null) {
685 return; // do not choose yet
686 }
687 String canonName = canonicalFileName();
688 if (file.nameString.equals("")) {
689 file.nameString = canonName;
690 }
691 if (file.nameString.equals(canonName)) {
692 // The file name is predictable. Transmit "".
693 file.name = getRefString("");
694 return;
695 }
696 // If name has not yet been looked up, find it now.
697 if (file.name == null) {
698 file.name = getRefString(file.nameString);
699 }
700 }
701
702 public String canonicalFileName() {
703 if (thisClass == null) return null;
704 return thisClass.stringValue() + ".class";
705 }
706
707 public java.io.File getFileName(java.io.File parent) {
708 String name = file.name.stringValue();
709 if (name.equals(""))
710 name = canonicalFileName();
711 String fname = name.replace('/', java.io.File.separatorChar);
712 return new java.io.File(parent, fname);
713 }
714 public java.io.File getFileName() {
715 return getFileName(null);
716 }
717
718 public String toString() {
719 return thisClass.stringValue();
720 }
721 }
722
723 void addClass(Class c) {
724 assert(c.getPackage() == this);
725 boolean added = classes.add(c);
726 assert(added);
727 // Make sure the class is represented in the total file order:
728 if (c.file == null) c.initFile(null);
729 addFile(c.file);
762 File(String nameString) {
763 nameString = fixupFileName(nameString);
764 this.name = getRefString(nameString);
765 this.nameString = name.stringValue();
766 }
767
768 public boolean isDirectory() {
769 // JAR directory. Useless.
770 return nameString.endsWith("/");
771 }
772 public boolean isClassStub() {
773 return (options & FO_IS_CLASS_STUB) != 0;
774 }
775 public Class getStubClass() {
776 assert(isClassStub());
777 assert(stubClass != null);
778 return stubClass;
779 }
780 public boolean isTrivialClassStub() {
781 return isClassStub()
782 && name.stringValue().equals("")
783 && (modtime == NO_MODTIME || modtime == default_modtime)
784 && (options &~ FO_IS_CLASS_STUB) == 0;
785 }
786
787 // The nameString is the key. Ignore other things.
788 // (Note: The name might be "", in the case of a trivial class stub.)
789 public boolean equals(Object o) {
790 if (o == null || (o.getClass() != File.class))
791 return false;
792 File that = (File)o;
793 return that.nameString.equals(this.nameString);
794 }
795 public int hashCode() {
796 return nameString.hashCode();
797 }
798 // Simple alphabetic sort. PackageWriter uses a better comparator.
799 public int compareTo(File that) {
800 return this.nameString.compareTo(that.nameString);
801 }
802 public String toString() {
|
668 maybeChooseFileName();
669 }
670
671 public void initFile(File file) {
672 assert(this.file == null); // set-once
673 if (file == null) {
674 // Build a trivial stub.
675 file = newStub(canonicalFileName());
676 }
677 this.file = file;
678 assert(file.isClassStub());
679 file.stubClass = this;
680 maybeChooseFileName();
681 }
682
683 public void maybeChooseFileName() {
684 if (thisClass == null) {
685 return; // do not choose yet
686 }
687 String canonName = canonicalFileName();
688 if (file.nameString.isEmpty()) {
689 file.nameString = canonName;
690 }
691 if (file.nameString.equals(canonName)) {
692 // The file name is predictable. Transmit "".
693 file.name = getRefString("");
694 return;
695 }
696 // If name has not yet been looked up, find it now.
697 if (file.name == null) {
698 file.name = getRefString(file.nameString);
699 }
700 }
701
702 public String canonicalFileName() {
703 if (thisClass == null) return null;
704 return thisClass.stringValue() + ".class";
705 }
706
707 public java.io.File getFileName(java.io.File parent) {
708 String name = file.name.stringValue();
709 if (name.isEmpty())
710 name = canonicalFileName();
711 String fname = name.replace('/', java.io.File.separatorChar);
712 return new java.io.File(parent, fname);
713 }
714 public java.io.File getFileName() {
715 return getFileName(null);
716 }
717
718 public String toString() {
719 return thisClass.stringValue();
720 }
721 }
722
723 void addClass(Class c) {
724 assert(c.getPackage() == this);
725 boolean added = classes.add(c);
726 assert(added);
727 // Make sure the class is represented in the total file order:
728 if (c.file == null) c.initFile(null);
729 addFile(c.file);
762 File(String nameString) {
763 nameString = fixupFileName(nameString);
764 this.name = getRefString(nameString);
765 this.nameString = name.stringValue();
766 }
767
768 public boolean isDirectory() {
769 // JAR directory. Useless.
770 return nameString.endsWith("/");
771 }
772 public boolean isClassStub() {
773 return (options & FO_IS_CLASS_STUB) != 0;
774 }
775 public Class getStubClass() {
776 assert(isClassStub());
777 assert(stubClass != null);
778 return stubClass;
779 }
780 public boolean isTrivialClassStub() {
781 return isClassStub()
782 && name.stringValue().isEmpty()
783 && (modtime == NO_MODTIME || modtime == default_modtime)
784 && (options &~ FO_IS_CLASS_STUB) == 0;
785 }
786
787 // The nameString is the key. Ignore other things.
788 // (Note: The name might be "", in the case of a trivial class stub.)
789 public boolean equals(Object o) {
790 if (o == null || (o.getClass() != File.class))
791 return false;
792 File that = (File)o;
793 return that.nameString.equals(this.nameString);
794 }
795 public int hashCode() {
796 return nameString.hashCode();
797 }
798 // Simple alphabetic sort. PackageWriter uses a better comparator.
799 public int compareTo(File that) {
800 return this.nameString.compareTo(that.nameString);
801 }
802 public String toString() {
|