home *** CD-ROM | disk | FTP | other *** search
- package sun.rmi.rmic;
-
- import java.io.File;
- import java.io.PrintStream;
- import java.util.Hashtable;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassFile;
- import sun.tools.java.ClassNotFound;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.FieldDefinition;
- import sun.tools.java.Identifier;
-
- public class TopGRP extends ProxyNames implements Constants {
- public static String streamName(Identifier var0, File var1, ClassDefinition var2) {
- String var3 = var0.getQualifier().toString().replace('.', File.separatorChar);
- String var4 = var0.getName() + ".java";
-
- try {
- Object var5 = null;
- File var8;
- if (var1 == null) {
- var8 = new File(System.getProperty("user.dir"), var4);
- } else if (var3.length() > 0) {
- var8 = new File(var1, var3);
- if (!var8.exists()) {
- var8.mkdirs();
- }
-
- var8 = new File(var8, var4);
- } else {
- var8 = new File(var1, var4);
- }
-
- return var8.getPath();
- } catch (Error var6) {
- ((Throwable)var6).printStackTrace();
- throw new Error("in Create ProxyStream");
- } catch (Exception var7) {
- ((Throwable)var7).printStackTrace();
- throw new Error("in Create ProxyStream");
- }
- }
-
- public static boolean remotable(Environment var0, ClassDefinition var1) {
- return check(var0, var1);
- }
-
- private static boolean check(Environment var0, ClassDefinition var1) {
- if (var1.isInterface()) {
- var0.error(0, "rmic.cant.make.stubs.for.interface", var1.getName());
- return false;
- } else {
- try {
- ClassDefinition var2 = checkImplementsRO(var0, var1);
- if (!var1.equals(var2)) {
- if (var2 != null) {
- var0.error(0, "rmic.must.implement.remoteobject", var1.getName(), var2.getName());
- } else {
- var0.error(0, "rmic.must.extend.remoteobject", var1.getName());
- }
-
- return false;
- }
- } catch (ClassNotFound var5) {
- var0.error(0, "class.not.found", var5.name, var1.getName());
- return false;
- }
-
- Hashtable var6 = new Hashtable(101);
-
- try {
- if (!collectMethods(var0, var1, var6)) {
- var0.error(0, "rmic.must.extend.remoteobject", var1.getName());
- return false;
- } else {
- return true;
- }
- } catch (ClassNotFound var4) {
- var0.error(0, "class.not.found", var4.name, var1.getName());
- return false;
- }
- }
- }
-
- private static ClassDefinition checkImplementsRO(Environment var0, ClassDefinition var1) throws ClassNotFound {
- ClassDeclaration var2 = var0.getClassDeclaration(ProxyNames.remoteObject());
- ClassDefinition var3 = var2.getClassDefinition(var0);
-
- while(var1 != null) {
- ClassDeclaration[] var4 = var1.getInterfaces();
-
- for(int var5 = var4.length - 1; var5 >= 0; --var5) {
- var4[var5].getClassDefinition(var0);
- if (var3.implementedBy(var0, var4[var5])) {
- return var1;
- }
- }
-
- if (var1.getSuperClass() != null) {
- var1 = var1.getSuperClass().getClassDefinition(var0);
- } else {
- var1 = null;
- }
- }
-
- return null;
- }
-
- public static boolean collectMethods(Environment var0, ClassDefinition var1, Hashtable var2) throws ClassNotFound {
- Identifier var3 = ProxyNames.remoteObject();
- Identifier var4 = ProxyNames.remoteObjectException();
- if (var1.getClassDeclaration().getName() == var3) {
- return true;
- } else {
- boolean var5 = false;
- boolean var6 = false;
- ClassDeclaration var7 = var1.getSuperClass();
- if (var7 != null && collectMethods(var0, var7.getClassDefinition(var0), var2)) {
- var5 = true;
- }
-
- ClassDeclaration[] var8 = var1.getInterfaces();
-
- for(int var9 = var8.length - 1; var9 >= 0; --var9) {
- ClassDefinition var10 = var8[var9].getClassDefinition(var0);
- if (collectMethods(var0, var10, var2)) {
- var5 = true;
- } else {
- var6 = true;
- }
- }
-
- if (var1.isInterface() && var6 && var5) {
- var0.error(0, "rmic.can.mix.remote.nonremote", var1.getName());
- return false;
- } else if (!var5) {
- return false;
- } else {
- if (var1.isInterface()) {
- for(FieldDefinition var14 = var1.getFirstField(); var14 != null; var14 = var14.getNextField()) {
- if (var14.isMethod() && !var14.isConstructor() && !var14.isInitializer()) {
- ClassDeclaration[] var11 = var14.getExceptions(var0);
- boolean var12 = false;
-
- for(int var13 = var11.length - 1; var13 >= 0; --var13) {
- if (var11[var13].getName().equals(var4)) {
- var12 = true;
- break;
- }
- }
-
- if (!var12) {
- var0.error(0, "rmic.must.throw.remoteexception", var1.getName(), var14.toString());
- var5 = false;
- }
- }
- }
- }
-
- if (var5 && var1.isInterface()) {
- for(FieldDefinition var15 = var1.getFirstField(); var15 != null; var15 = var15.getNextField()) {
- if (var15.isMethod() && !var15.isConstructor() && !var15.isInitializer()) {
- String var16 = var15.getName() + var15.getType().getTypeSignature();
- var2.put(var16, var15);
- }
- }
- }
-
- return var5;
- }
- }
- }
-
- public static void generate(BatchEnvironment var0, ClassDefinition var1, File var2, File var3, boolean var4) {
- int var5 = var0.nerrors;
- if (check(var0, var1) && var5 == var0.nerrors) {
- Identifier var6 = ProxyNames.proxyClassName(var1.getName());
- String var7 = streamName(var6, var2, var1);
- File var8 = new File(var7);
- Identifier var9 = ProxyNames.skeletonClassName(var1.getName());
- String var10 = streamName(var9, var3, var1);
- File var11 = new File(var10);
-
- try {
- ProxyStream var14 = new ProxyStream(var7);
- var14.setIndent(0);
- GenerateRemoteProxy var15 = new GenerateRemoteProxy(var0, var1, var14);
- var15.printStubs();
- ((PrintStream)var14).close();
- if (((Environment)var0).verbose()) {
- System.out.println("[wrote " + var6 + "]");
- }
-
- ((sun.tools.javac.BatchEnvironment)var0).parseFile(new ClassFile(var8));
- ProxyStream var16 = new ProxyStream(var10);
- var16.setIndent(0);
- GenerateRemoteProxy var17 = new GenerateRemoteProxy(var0, var1, var16);
- var17.printSkeleton();
- ((PrintStream)var16).close();
- if (((Environment)var0).verbose()) {
- System.out.println("[wrote " + var9 + "]");
- }
-
- ((sun.tools.javac.BatchEnvironment)var0).parseFile(new ClassFile(var11));
- ((sun.tools.javac.BatchEnvironment)var0).flushErrors();
- } catch (Error var21) {
- ((Throwable)var21).printStackTrace();
- } catch (Exception var22) {
- ((Throwable)var22).printStackTrace();
- } finally {
- if (!var4) {
- var8.delete();
- var11.delete();
- }
-
- }
-
- }
- }
- }
-