home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / text / AbstractDocument.class (.txt) next >
Encoding:
Java Class File  |  1979-12-31  |  13.4 KB  |  613 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.font.TextAttribute;
  4. import java.io.IOException;
  5. import java.io.ObjectInputStream;
  6. import java.io.PrintStream;
  7. import java.io.Serializable;
  8. import java.security.AccessController;
  9. import java.util.Dictionary;
  10. import java.util.EventListener;
  11. import java.util.Hashtable;
  12. import java.util.Vector;
  13. import javax.swing.event.DocumentEvent;
  14. import javax.swing.event.DocumentListener;
  15. import javax.swing.event.EventListenerList;
  16. import javax.swing.event.UndoableEditEvent;
  17. import javax.swing.event.UndoableEditListener;
  18. import javax.swing.event.DocumentEvent.EventType;
  19. import javax.swing.undo.CompoundEdit;
  20. import javax.swing.undo.UndoableEdit;
  21.  
  22. public abstract class AbstractDocument implements Document, Serializable {
  23.    private transient int numReaders;
  24.    private transient Thread currWriter;
  25.    private static Boolean defaultI18NProperty;
  26.    private Dictionary documentProperties;
  27.    protected EventListenerList listenerList;
  28.    private Content data;
  29.    private AttributeContext context;
  30.    private transient BranchElement bidiRoot;
  31.    private static final String BAD_LOCK_STATE = "document lock failure";
  32.    protected static final String BAD_LOCATION = "document location failure";
  33.    public static final String ParagraphElementName = "paragraph";
  34.    public static final String ContentElementName = "content";
  35.    public static final String SectionElementName = "section";
  36.    public static final String BidiElementName = "bidi level";
  37.    public static final String ElementNameAttribute = "$ename";
  38.    static final String I18NProperty = "i18n";
  39.    static final String AsyncLoadPriority = "load priority";
  40.    // $FF: synthetic field
  41.    static Class class$javax$swing$event$DocumentListener;
  42.    // $FF: synthetic field
  43.    static Class class$javax$swing$event$UndoableEditListener;
  44.  
  45.    protected AbstractDocument(Content var1) {
  46.       this(var1, StyleContext.getDefaultStyleContext());
  47.    }
  48.  
  49.    protected AbstractDocument(Content var1, AttributeContext var2) {
  50.       this.documentProperties = null;
  51.       this.listenerList = new EventListenerList();
  52.       this.data = var1;
  53.       this.context = var2;
  54.       this.bidiRoot = new BidiRootElement(this);
  55.       if (defaultI18NProperty == null) {
  56.          Object var3 = AccessController.doPrivileged(new 1(this));
  57.          if (var3 != null) {
  58.             defaultI18NProperty = Boolean.valueOf((String)var3);
  59.          } else {
  60.             defaultI18NProperty = Boolean.FALSE;
  61.          }
  62.       }
  63.  
  64.       this.putProperty("i18n", defaultI18NProperty);
  65.       this.writeLock();
  66.  
  67.       try {
  68.          Element[] var8 = new Element[]{new BidiElement(this, this.bidiRoot, 0, 1, 0)};
  69.          this.bidiRoot.replace(0, 0, var8);
  70.       } finally {
  71.          this.writeUnlock();
  72.       }
  73.  
  74.    }
  75.  
  76.    public Dictionary getDocumentProperties() {
  77.       if (this.documentProperties == null) {
  78.          this.documentProperties = new Hashtable(2);
  79.       }
  80.  
  81.       return this.documentProperties;
  82.    }
  83.  
  84.    public void setDocumentProperties(Dictionary var1) {
  85.       this.documentProperties = var1;
  86.    }
  87.  
  88.    protected void fireInsertUpdate(DocumentEvent var1) {
  89.       Object[] var2 = this.listenerList.getListenerList();
  90.  
  91.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  92.          if (var2[var3] == (class$javax$swing$event$DocumentListener == null ? (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")) : class$javax$swing$event$DocumentListener)) {
  93.             ((DocumentListener)var2[var3 + 1]).insertUpdate(var1);
  94.          }
  95.       }
  96.  
  97.    }
  98.  
  99.    protected void fireChangedUpdate(DocumentEvent var1) {
  100.       Object[] var2 = this.listenerList.getListenerList();
  101.  
  102.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  103.          if (var2[var3] == (class$javax$swing$event$DocumentListener == null ? (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")) : class$javax$swing$event$DocumentListener)) {
  104.             ((DocumentListener)var2[var3 + 1]).changedUpdate(var1);
  105.          }
  106.       }
  107.  
  108.    }
  109.  
  110.    protected void fireRemoveUpdate(DocumentEvent var1) {
  111.       Object[] var2 = this.listenerList.getListenerList();
  112.  
  113.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  114.          if (var2[var3] == (class$javax$swing$event$DocumentListener == null ? (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")) : class$javax$swing$event$DocumentListener)) {
  115.             ((DocumentListener)var2[var3 + 1]).removeUpdate(var1);
  116.          }
  117.       }
  118.  
  119.    }
  120.  
  121.    protected void fireUndoableEditUpdate(UndoableEditEvent var1) {
  122.       Object[] var2 = this.listenerList.getListenerList();
  123.  
  124.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  125.          if (var2[var3] == (class$javax$swing$event$UndoableEditListener == null ? (class$javax$swing$event$UndoableEditListener = class$("javax.swing.event.UndoableEditListener")) : class$javax$swing$event$UndoableEditListener)) {
  126.             ((UndoableEditListener)var2[var3 + 1]).undoableEditHappened(var1);
  127.          }
  128.       }
  129.  
  130.    }
  131.  
  132.    public EventListener[] getListeners(Class var1) {
  133.       return this.listenerList.getListeners(var1);
  134.    }
  135.  
  136.    public int getAsynchronousLoadPriority() {
  137.       Integer var1 = (Integer)this.getProperty("load priority");
  138.       return var1 != null ? var1 : -1;
  139.    }
  140.  
  141.    public void setAsynchronousLoadPriority(int var1) {
  142.       Integer var2 = var1 >= 0 ? new Integer(var1) : null;
  143.       this.putProperty("load priority", var2);
  144.    }
  145.  
  146.    public void render(Runnable var1) {
  147.       this.readLock();
  148.  
  149.       try {
  150.          var1.run();
  151.       } finally {
  152.          this.readUnlock();
  153.       }
  154.  
  155.    }
  156.  
  157.    public int getLength() {
  158.       return this.data.length() - 1;
  159.    }
  160.  
  161.    public void addDocumentListener(DocumentListener var1) {
  162.       this.listenerList.add(class$javax$swing$event$DocumentListener == null ? (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")) : class$javax$swing$event$DocumentListener, var1);
  163.    }
  164.  
  165.    public void removeDocumentListener(DocumentListener var1) {
  166.       this.listenerList.remove(class$javax$swing$event$DocumentListener == null ? (class$javax$swing$event$DocumentListener = class$("javax.swing.event.DocumentListener")) : class$javax$swing$event$DocumentListener, var1);
  167.    }
  168.  
  169.    public void addUndoableEditListener(UndoableEditListener var1) {
  170.       this.listenerList.add(class$javax$swing$event$UndoableEditListener == null ? (class$javax$swing$event$UndoableEditListener = class$("javax.swing.event.UndoableEditListener")) : class$javax$swing$event$UndoableEditListener, var1);
  171.    }
  172.  
  173.    public void removeUndoableEditListener(UndoableEditListener var1) {
  174.       this.listenerList.remove(class$javax$swing$event$UndoableEditListener == null ? (class$javax$swing$event$UndoableEditListener = class$("javax.swing.event.UndoableEditListener")) : class$javax$swing$event$UndoableEditListener, var1);
  175.    }
  176.  
  177.    public final Object getProperty(Object var1) {
  178.       return this.getDocumentProperties().get(var1);
  179.    }
  180.  
  181.    public final void putProperty(Object var1, Object var2) {
  182.       if (var2 != null) {
  183.          this.getDocumentProperties().put(var1, var2);
  184.       } else {
  185.          this.getDocumentProperties().remove(var1);
  186.       }
  187.  
  188.       if (var1 == TextAttribute.RUN_DIRECTION && Boolean.TRUE.equals(this.getProperty("i18n"))) {
  189.          this.writeLock();
  190.  
  191.          try {
  192.             DefaultDocumentEvent var3 = new DefaultDocumentEvent(this, 0, this.getLength(), EventType.INSERT);
  193.             this.updateBidi(var3);
  194.          } finally {
  195.             this.writeUnlock();
  196.          }
  197.       }
  198.  
  199.    }
  200.  
  201.    public void remove(int var1, int var2) throws BadLocationException {
  202.       if (var2 > 0) {
  203.          this.writeLock();
  204.  
  205.          try {
  206.             DefaultDocumentEvent var3 = new DefaultDocumentEvent(this, var1, var2, EventType.REMOVE);
  207.             boolean var4 = false;
  208.             if (Utilities.is1dot2) {
  209.                Element var5;
  210.                for(var5 = this.getDefaultRootElement(); !var5.isLeaf(); var5 = var5.getElement(var5.getElementIndex(var1))) {
  211.                }
  212.  
  213.                var4 = Utilities.isComposedTextElement(var5);
  214.             }
  215.  
  216.             this.removeUpdate(var3);
  217.             UndoableEdit var10 = this.data.remove(var1, var2);
  218.             if (var10 != null) {
  219.                var3.addEdit(var10);
  220.             }
  221.  
  222.             this.postRemoveUpdate(var3);
  223.             ((CompoundEdit)var3).end();
  224.             this.fireRemoveUpdate(var3);
  225.             if (var10 != null && !var4) {
  226.                this.fireUndoableEditUpdate(new UndoableEditEvent(this, var3));
  227.             }
  228.          } finally {
  229.             this.writeUnlock();
  230.          }
  231.       }
  232.  
  233.    }
  234.  
  235.    public void insertString(int var1, String var2, AttributeSet var3) throws BadLocationException {
  236.       if (var2 != null && var2.length() != 0) {
  237.          this.writeLock();
  238.  
  239.          try {
  240.             UndoableEdit var4 = this.data.insertString(var1, var2);
  241.             DefaultDocumentEvent var5 = new DefaultDocumentEvent(this, var1, var2.length(), EventType.INSERT);
  242.             if (var4 != null) {
  243.                var5.addEdit(var4);
  244.             }
  245.  
  246.             if (this.getProperty("i18n").equals(Boolean.FALSE)) {
  247.                Object var6 = this.getProperty(TextAttribute.RUN_DIRECTION);
  248.                if (var6 != null && var6.equals(TextAttribute.RUN_DIRECTION_RTL)) {
  249.                   this.putProperty("i18n", Boolean.TRUE);
  250.                } else {
  251.                   int var7 = var2.length();
  252.  
  253.                   for(int var8 = 0; var8 < var7; ++var8) {
  254.                      char var9 = var2.charAt(var8);
  255.                      if (Bidi.requiresBidi(var9)) {
  256.                         this.putProperty("i18n", Boolean.TRUE);
  257.                         break;
  258.                      }
  259.                   }
  260.                }
  261.             }
  262.  
  263.             this.insertUpdate(var5, var3);
  264.             ((CompoundEdit)var5).end();
  265.             this.fireInsertUpdate(var5);
  266.             if (var4 != null && (var3 == null || !var3.isDefined(StyleConstants.ComposedTextAttribute))) {
  267.                this.fireUndoableEditUpdate(new UndoableEditEvent(this, var5));
  268.             }
  269.          } finally {
  270.             this.writeUnlock();
  271.          }
  272.  
  273.       }
  274.    }
  275.  
  276.    public String getText(int var1, int var2) throws BadLocationException {
  277.       if (var2 < 0) {
  278.          throw new BadLocationException("Length must be positive", var2);
  279.       } else {
  280.          String var3 = this.data.getString(var1, var2);
  281.          return var3;
  282.       }
  283.    }
  284.  
  285.    public void getText(int var1, int var2, Segment var3) throws BadLocationException {
  286.       if (var2 < 0) {
  287.          throw new BadLocationException("Length must be positive", var2);
  288.       } else {
  289.          this.data.getChars(var1, var2, var3);
  290.       }
  291.    }
  292.  
  293.    public synchronized Position createPosition(int var1) throws BadLocationException {
  294.       return this.data.createPosition(var1);
  295.    }
  296.  
  297.    public final Position getStartPosition() {
  298.       Position var1;
  299.       try {
  300.          var1 = this.createPosition(0);
  301.       } catch (BadLocationException var3) {
  302.          var1 = null;
  303.       }
  304.  
  305.       return var1;
  306.    }
  307.  
  308.    public final Position getEndPosition() {
  309.       Position var1;
  310.       try {
  311.          var1 = this.createPosition(this.data.length());
  312.       } catch (BadLocationException var3) {
  313.          var1 = null;
  314.       }
  315.  
  316.       return var1;
  317.    }
  318.  
  319.    public Element[] getRootElements() {
  320.       Element[] var1 = new Element[]{this.getDefaultRootElement(), this.getBidiRootElement()};
  321.       return var1;
  322.    }
  323.  
  324.    public abstract Element getDefaultRootElement();
  325.  
  326.    public Element getBidiRootElement() {
  327.       return this.bidiRoot;
  328.    }
  329.  
  330.    boolean isLeftToRight(int var1, int var2) {
  331.       if (!this.getProperty("i18n").equals(Boolean.TRUE)) {
  332.          return true;
  333.       } else {
  334.          Element var3 = this.getBidiRootElement();
  335.          int var4 = var3.getElementIndex(var1);
  336.          Element var5 = var3.getElement(var4);
  337.          if (var5.getEndOffset() >= var2) {
  338.             AttributeSet var6 = var5.getAttributes();
  339.             return StyleConstants.getBidiLevel(var6) % 2 == 0;
  340.          } else {
  341.             return true;
  342.          }
  343.       }
  344.    }
  345.  
  346.    public abstract Element getParagraphElement(int var1);
  347.  
  348.    protected final AttributeContext getAttributeContext() {
  349.       return this.context;
  350.    }
  351.  
  352.    protected void insertUpdate(DefaultDocumentEvent var1, AttributeSet var2) {
  353.       if (this.getProperty("i18n").equals(Boolean.TRUE)) {
  354.          this.updateBidi(var1);
  355.       }
  356.  
  357.    }
  358.  
  359.    protected void removeUpdate(DefaultDocumentEvent var1) {
  360.    }
  361.  
  362.    protected void postRemoveUpdate(DefaultDocumentEvent var1) {
  363.       if (this.getProperty("i18n").equals(Boolean.TRUE)) {
  364.          this.updateBidi(var1);
  365.       }
  366.  
  367.    }
  368.  
  369.    void updateBidi(DefaultDocumentEvent var1) {
  370.       int var2;
  371.       int var3;
  372.       if (javax.swing.text.AbstractDocument.DefaultDocumentEvent.access$000(var1) != EventType.INSERT && javax.swing.text.AbstractDocument.DefaultDocumentEvent.access$000(var1) != EventType.CHANGE) {
  373.          if (javax.swing.text.AbstractDocument.DefaultDocumentEvent.access$000(var1) != EventType.REMOVE) {
  374.             throw new Error("Internal error: unknown event type.");
  375.          }
  376.  
  377.          Element var18 = this.getParagraphElement(var1.getOffset());
  378.          var2 = var18.getStartOffset();
  379.          var3 = var18.getEndOffset();
  380.       } else {
  381.          int var4 = var1.getOffset();
  382.          int var5 = var4 + var1.getLength();
  383.          var2 = this.getParagraphElement(var4).getStartOffset();
  384.          var3 = this.getParagraphElement(var5).getEndOffset();
  385.       }
  386.  
  387.       byte[] var19 = this.calculateBidiLevels(var2, var3);
  388.       Vector var20 = new Vector();
  389.       int var6 = var2;
  390.       int var7 = 0;
  391.       if (var2 > 0) {
  392.          int var8 = this.bidiRoot.getElementIndex(var2 - 1);
  393.          var7 = var8;
  394.          Element var9 = this.bidiRoot.getElement(var8);
  395.          int var10 = StyleConstants.getBidiLevel(var9.getAttributes());
  396.          if (var10 == var19[0]) {
  397.             var6 = var9.getStartOffset();
  398.          } else if (var9.getEndOffset() > var2) {
  399.             var20.addElement(new BidiElement(this, this.bidiRoot, var9.getStartOffset(), var2, var10));
  400.          } else {
  401.             var7 = var8 + 1;
  402.          }
  403.       }
  404.  
  405.       int var21;
  406.       for(var21 = 0; var21 < var19.length && var19[var21] == var19[0]; ++var21) {
  407.       }
  408.  
  409.       int var22 = var3;
  410.       BidiElement var23 = null;
  411.       int var11 = this.bidiRoot.getElementCount() - 1;
  412.       if (var3 <= this.getLength()) {
  413.          int var12 = this.bidiRoot.getElementIndex(var3);
  414.          var11 = var12;
  415.          Element var13 = this.bidiRoot.getElement(var12);
  416.          int var14 = StyleConstants.getBidiLevel(var13.getAttributes());
  417.          if (var14 == var19[var19.length - 1]) {
  418.             var22 = var13.getEndOffset();
  419.          } else if (var13.getStartOffset() < var3) {
  420.             var23 = new BidiElement(this, this.bidiRoot, var3, var13.getEndOffset(), var14);
  421.          } else {
  422.             var11 = var12 - 1;
  423.          }
  424.       }
  425.  
  426.       int var24;
  427.       for(var24 = var19.length; var24 > var21 && var19[var24 - 1] == var19[var19.length - 1]; --var24) {
  428.       }
  429.  
  430.       if (var21 == var24 && var19[0] == var19[var19.length - 1]) {
  431.          var20.addElement(new BidiElement(this, this.bidiRoot, var6, var22, var19[0]));
  432.       } else {
  433.          var20.addElement(new BidiElement(this, this.bidiRoot, var6, var21 + var2, var19[0]));
  434.  
  435.          int var27;
  436.          for(int var25 = var21; var25 < var24; var25 = var27) {
  437.             for(var27 = var25; var27 < var19.length && var19[var27] == var19[var25]; ++var27) {
  438.             }
  439.  
  440.             var20.addElement(new BidiElement(this, this.bidiRoot, var2 + var25, var2 + var27, var19[var25]));
  441.          }
  442.  
  443.          var20.addElement(new BidiElement(this, this.bidiRoot, var24 + var2, var22, var19[var19.length - 1]));
  444.       }
  445.  
  446.       if (var23 != null) {
  447.          var20.addElement(var23);
  448.       }
  449.  
  450.       int var26 = 0;
  451.       if (this.bidiRoot.getElementCount() > 0) {
  452.          var26 = var11 - var7 + 1;
  453.       }
  454.  
  455.       Element[] var28 = new Element[var26];
  456.  
  457.       for(int var15 = 0; var15 < var26; ++var15) {
  458.          var28[var15] = this.bidiRoot.getElement(var7 + var15);
  459.       }
  460.  
  461.       Element[] var16 = new Element[var20.size()];
  462.       var20.copyInto(var16);
  463.       ElementEdit var17 = new ElementEdit(this.bidiRoot, var7, var28, var16);
  464.       var1.addEdit(var17);
  465.       this.bidiRoot.replace(var7, var28.length, var16);
  466.    }
  467.  
  468.    private byte[] calculateBidiLevels(int var1, int var2) {
  469.       byte[] var3 = new byte[var2 - var1];
  470.       int var4 = 0;
  471.       Boolean var5 = null;
  472.       Object var6 = this.getProperty(TextAttribute.RUN_DIRECTION);
  473.       if (var6 instanceof Boolean) {
  474.          var5 = (Boolean)var6;
  475.       }
  476.  
  477.       Element var8;
  478.       for(int var7 = var1; var7 < var2; var7 = var8.getEndOffset()) {
  479.          var8 = this.getParagraphElement(var7);
  480.          int var9 = var8.getStartOffset();
  481.          int var10 = var8.getEndOffset();
  482.          Boolean var11 = var5;
  483.          var6 = var8.getAttributes().getAttribute(TextAttribute.RUN_DIRECTION);
  484.          if (var6 instanceof Boolean) {
  485.             var11 = (Boolean)var6;
  486.          }
  487.  
  488.          String var12;
  489.          try {
  490.             var12 = this.getText(var9, var10 - var9);
  491.          } catch (BadLocationException var15) {
  492.             throw new Error("Internal error: " + ((Throwable)var15).toString());
  493.          }
  494.  
  495.          Bidi var13;
  496.          if (var11 != null) {
  497.             boolean var14 = var11.equals(TextAttribute.RUN_DIRECTION_LTR);
  498.             var13 = new Bidi(var12.toCharArray(), var14);
  499.          } else {
  500.             var13 = new Bidi(var12.toCharArray());
  501.          }
  502.  
  503.          byte[] var17 = var13.getLevels();
  504.          System.arraycopy(var17, 0, var3, var4, var17.length);
  505.          var4 += var17.length;
  506.       }
  507.  
  508.       if (var4 != var3.length) {
  509.          throw new Error("levelsEnd assertion failed.");
  510.       } else {
  511.          return var3;
  512.       }
  513.    }
  514.  
  515.    public void dump(PrintStream var1) {
  516.       Element var2 = this.getDefaultRootElement();
  517.       if (var2 instanceof AbstractElement) {
  518.          ((AbstractElement)var2).dump(var1, 0);
  519.       }
  520.  
  521.       this.bidiRoot.dump(var1, 0);
  522.    }
  523.  
  524.    protected final Content getContent() {
  525.       return this.data;
  526.    }
  527.  
  528.    protected Element createLeafElement(Element var1, AttributeSet var2, int var3, int var4) {
  529.       return new LeafElement(this, var1, var2, var3, var4);
  530.    }
  531.  
  532.    protected Element createBranchElement(Element var1, AttributeSet var2) {
  533.       return new BranchElement(this, var1, var2);
  534.    }
  535.  
  536.    protected final synchronized Thread getCurrentWriter() {
  537.       return this.currWriter;
  538.    }
  539.  
  540.    protected final synchronized void writeLock() {
  541.       try {
  542.          while(this.numReaders > 0 || this.currWriter != null) {
  543.             if (Thread.currentThread() == this.currWriter) {
  544.                throw new IllegalStateException("Attempt to mutate in notification");
  545.             }
  546.  
  547.             this.wait();
  548.          }
  549.  
  550.          this.currWriter = Thread.currentThread();
  551.       } catch (InterruptedException var2) {
  552.          throw new Error("Interrupted attempt to aquire write lock");
  553.       }
  554.    }
  555.  
  556.    protected final synchronized void writeUnlock() {
  557.       this.currWriter = null;
  558.       this.notifyAll();
  559.    }
  560.  
  561.    public final synchronized void readLock() {
  562.       try {
  563.          while(this.currWriter != null) {
  564.             if (this.currWriter == Thread.currentThread()) {
  565.                return;
  566.             }
  567.  
  568.             this.wait();
  569.          }
  570.  
  571.          ++this.numReaders;
  572.       } catch (InterruptedException var2) {
  573.          throw new Error("Interrupted attempt to aquire read lock");
  574.       }
  575.    }
  576.  
  577.    public final synchronized void readUnlock() {
  578.       if (this.currWriter != Thread.currentThread()) {
  579.          if (this.numReaders <= 0) {
  580.             throw new StateInvariantError("document lock failure");
  581.          } else {
  582.             --this.numReaders;
  583.             this.notify();
  584.          }
  585.       }
  586.    }
  587.  
  588.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  589.       var1.defaultReadObject();
  590.       this.listenerList = new EventListenerList();
  591.       this.bidiRoot = new BidiRootElement(this);
  592.  
  593.       try {
  594.          this.writeLock();
  595.          Element[] var2 = new Element[]{new BidiElement(this, this.bidiRoot, 0, 1, 0)};
  596.          this.bidiRoot.replace(0, 0, var2);
  597.       } finally {
  598.          this.writeUnlock();
  599.       }
  600.  
  601.       var1.registerValidation(new 2(this), 0);
  602.    }
  603.  
  604.    // $FF: synthetic method
  605.    static Class class$(String var0) {
  606.       try {
  607.          return Class.forName(var0);
  608.       } catch (ClassNotFoundException var2) {
  609.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  610.       }
  611.    }
  612. }
  613.