home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / rmi / rmic / TopGRP.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  6.0 KB  |  223 lines

  1. package sun.rmi.rmic;
  2.  
  3. import java.io.File;
  4. import java.io.PrintStream;
  5. import java.util.Hashtable;
  6. import sun.tools.java.ClassDeclaration;
  7. import sun.tools.java.ClassDefinition;
  8. import sun.tools.java.ClassFile;
  9. import sun.tools.java.ClassNotFound;
  10. import sun.tools.java.Constants;
  11. import sun.tools.java.Environment;
  12. import sun.tools.java.FieldDefinition;
  13. import sun.tools.java.Identifier;
  14.  
  15. public class TopGRP extends ProxyNames implements Constants {
  16.    public static String streamName(Identifier var0, File var1, ClassDefinition var2) {
  17.       String var3 = var0.getQualifier().toString().replace('.', File.separatorChar);
  18.       String var4 = var0.getName() + ".java";
  19.  
  20.       try {
  21.          Object var5 = null;
  22.          File var8;
  23.          if (var1 == null) {
  24.             var8 = new File(System.getProperty("user.dir"), var4);
  25.          } else if (var3.length() > 0) {
  26.             var8 = new File(var1, var3);
  27.             if (!var8.exists()) {
  28.                var8.mkdirs();
  29.             }
  30.  
  31.             var8 = new File(var8, var4);
  32.          } else {
  33.             var8 = new File(var1, var4);
  34.          }
  35.  
  36.          return var8.getPath();
  37.       } catch (Error var6) {
  38.          ((Throwable)var6).printStackTrace();
  39.          throw new Error("in Create ProxyStream");
  40.       } catch (Exception var7) {
  41.          ((Throwable)var7).printStackTrace();
  42.          throw new Error("in Create ProxyStream");
  43.       }
  44.    }
  45.  
  46.    public static boolean remotable(Environment var0, ClassDefinition var1) {
  47.       return check(var0, var1);
  48.    }
  49.  
  50.    private static boolean check(Environment var0, ClassDefinition var1) {
  51.       if (var1.isInterface()) {
  52.          var0.error(0, "rmic.cant.make.stubs.for.interface", var1.getName());
  53.          return false;
  54.       } else {
  55.          try {
  56.             ClassDefinition var2 = checkImplementsRO(var0, var1);
  57.             if (!var1.equals(var2)) {
  58.                if (var2 != null) {
  59.                   var0.error(0, "rmic.must.implement.remoteobject", var1.getName(), var2.getName());
  60.                } else {
  61.                   var0.error(0, "rmic.must.extend.remoteobject", var1.getName());
  62.                }
  63.  
  64.                return false;
  65.             }
  66.          } catch (ClassNotFound var5) {
  67.             var0.error(0, "class.not.found", var5.name, var1.getName());
  68.             return false;
  69.          }
  70.  
  71.          Hashtable var6 = new Hashtable(101);
  72.  
  73.          try {
  74.             if (!collectMethods(var0, var1, var6)) {
  75.                var0.error(0, "rmic.must.extend.remoteobject", var1.getName());
  76.                return false;
  77.             } else {
  78.                return true;
  79.             }
  80.          } catch (ClassNotFound var4) {
  81.             var0.error(0, "class.not.found", var4.name, var1.getName());
  82.             return false;
  83.          }
  84.       }
  85.    }
  86.  
  87.    private static ClassDefinition checkImplementsRO(Environment var0, ClassDefinition var1) throws ClassNotFound {
  88.       ClassDeclaration var2 = var0.getClassDeclaration(ProxyNames.remoteObject());
  89.       ClassDefinition var3 = var2.getClassDefinition(var0);
  90.  
  91.       while(var1 != null) {
  92.          ClassDeclaration[] var4 = var1.getInterfaces();
  93.  
  94.          for(int var5 = var4.length - 1; var5 >= 0; --var5) {
  95.             var4[var5].getClassDefinition(var0);
  96.             if (var3.implementedBy(var0, var4[var5])) {
  97.                return var1;
  98.             }
  99.          }
  100.  
  101.          if (var1.getSuperClass() != null) {
  102.             var1 = var1.getSuperClass().getClassDefinition(var0);
  103.          } else {
  104.             var1 = null;
  105.          }
  106.       }
  107.  
  108.       return null;
  109.    }
  110.  
  111.    public static boolean collectMethods(Environment var0, ClassDefinition var1, Hashtable var2) throws ClassNotFound {
  112.       Identifier var3 = ProxyNames.remoteObject();
  113.       Identifier var4 = ProxyNames.remoteObjectException();
  114.       if (var1.getClassDeclaration().getName() == var3) {
  115.          return true;
  116.       } else {
  117.          boolean var5 = false;
  118.          boolean var6 = false;
  119.          ClassDeclaration var7 = var1.getSuperClass();
  120.          if (var7 != null && collectMethods(var0, var7.getClassDefinition(var0), var2)) {
  121.             var5 = true;
  122.          }
  123.  
  124.          ClassDeclaration[] var8 = var1.getInterfaces();
  125.  
  126.          for(int var9 = var8.length - 1; var9 >= 0; --var9) {
  127.             ClassDefinition var10 = var8[var9].getClassDefinition(var0);
  128.             if (collectMethods(var0, var10, var2)) {
  129.                var5 = true;
  130.             } else {
  131.                var6 = true;
  132.             }
  133.          }
  134.  
  135.          if (var1.isInterface() && var6 && var5) {
  136.             var0.error(0, "rmic.can.mix.remote.nonremote", var1.getName());
  137.             return false;
  138.          } else if (!var5) {
  139.             return false;
  140.          } else {
  141.             if (var1.isInterface()) {
  142.                for(FieldDefinition var14 = var1.getFirstField(); var14 != null; var14 = var14.getNextField()) {
  143.                   if (var14.isMethod() && !var14.isConstructor() && !var14.isInitializer()) {
  144.                      ClassDeclaration[] var11 = var14.getExceptions(var0);
  145.                      boolean var12 = false;
  146.  
  147.                      for(int var13 = var11.length - 1; var13 >= 0; --var13) {
  148.                         if (var11[var13].getName().equals(var4)) {
  149.                            var12 = true;
  150.                            break;
  151.                         }
  152.                      }
  153.  
  154.                      if (!var12) {
  155.                         var0.error(0, "rmic.must.throw.remoteexception", var1.getName(), var14.toString());
  156.                         var5 = false;
  157.                      }
  158.                   }
  159.                }
  160.             }
  161.  
  162.             if (var5 && var1.isInterface()) {
  163.                for(FieldDefinition var15 = var1.getFirstField(); var15 != null; var15 = var15.getNextField()) {
  164.                   if (var15.isMethod() && !var15.isConstructor() && !var15.isInitializer()) {
  165.                      String var16 = var15.getName() + var15.getType().getTypeSignature();
  166.                      var2.put(var16, var15);
  167.                   }
  168.                }
  169.             }
  170.  
  171.             return var5;
  172.          }
  173.       }
  174.    }
  175.  
  176.    public static void generate(BatchEnvironment var0, ClassDefinition var1, File var2, File var3, boolean var4) {
  177.       int var5 = var0.nerrors;
  178.       if (check(var0, var1) && var5 == var0.nerrors) {
  179.          Identifier var6 = ProxyNames.proxyClassName(var1.getName());
  180.          String var7 = streamName(var6, var2, var1);
  181.          File var8 = new File(var7);
  182.          Identifier var9 = ProxyNames.skeletonClassName(var1.getName());
  183.          String var10 = streamName(var9, var3, var1);
  184.          File var11 = new File(var10);
  185.  
  186.          try {
  187.             ProxyStream var14 = new ProxyStream(var7);
  188.             var14.setIndent(0);
  189.             GenerateRemoteProxy var15 = new GenerateRemoteProxy(var0, var1, var14);
  190.             var15.printStubs();
  191.             ((PrintStream)var14).close();
  192.             if (((Environment)var0).verbose()) {
  193.                System.out.println("[wrote " + var6 + "]");
  194.             }
  195.  
  196.             ((sun.tools.javac.BatchEnvironment)var0).parseFile(new ClassFile(var8));
  197.             ProxyStream var16 = new ProxyStream(var10);
  198.             var16.setIndent(0);
  199.             GenerateRemoteProxy var17 = new GenerateRemoteProxy(var0, var1, var16);
  200.             var17.printSkeleton();
  201.             ((PrintStream)var16).close();
  202.             if (((Environment)var0).verbose()) {
  203.                System.out.println("[wrote " + var9 + "]");
  204.             }
  205.  
  206.             ((sun.tools.javac.BatchEnvironment)var0).parseFile(new ClassFile(var11));
  207.             ((sun.tools.javac.BatchEnvironment)var0).flushErrors();
  208.          } catch (Error var21) {
  209.             ((Throwable)var21).printStackTrace();
  210.          } catch (Exception var22) {
  211.             ((Throwable)var22).printStackTrace();
  212.          } finally {
  213.             if (!var4) {
  214.                var8.delete();
  215.                var11.delete();
  216.             }
  217.  
  218.          }
  219.  
  220.       }
  221.    }
  222. }
  223.