From 5a8d668b84f71bdc027c8cf596e0bb208494bc5d Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 5 May 1999 20:48:10 +0000 Subject: [PATCH] getClassString takes scopeType parameter git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@759 379699f6-c40d-0410-875b-85095c16579e --- jode/jode/decompiler/ClassAnalyzer.java | 111 +++++++++++++----------- 1 file changed, 62 insertions(+), 49 deletions(-) diff --git a/jode/jode/decompiler/ClassAnalyzer.java b/jode/jode/decompiler/ClassAnalyzer.java index 46ce7de..2637a43 100644 --- a/jode/jode/decompiler/ClassAnalyzer.java +++ b/jode/jode/decompiler/ClassAnalyzer.java @@ -40,47 +40,12 @@ public class ClassAnalyzer implements Analyzer, Scope { FieldAnalyzer[] fields; MethodAnalyzer[] methods; ClassAnalyzer[] inners; + int modifiers; MethodAnalyzer staticConstructor; MethodAnalyzer[] constructors; - public boolean isScopeOf(Object obj, int scopeType) { - if (clazz.equals(obj) && scopeType == CLASSSCOPE) - return true; - return false; - } - - public boolean conflicts(String name, int usageType) { - ClassInfo info = clazz; - while (info != null) { - if (usageType == METHODNAME) { - MethodInfo[] minfos = info.getMethods(); - for (int i = 0; i< minfos.length; i++) - if (minfos[i].getName().equals(name)) - return true; - } - if (usageType == FIELDNAME || usageType == AMBIGUOUSNAME) { - FieldInfo[] finfos = info.getFields(); - for (int i=0; i < finfos.length; i++) { - if (finfos[i].getName().equals(name)) - return true; - } - } - if (usageType == CLASSNAME || usageType == AMBIGUOUSNAME) { - InnerClassInfo[] iinfos = info.getInnerClasses(); - if (iinfos != null) { - for (int i=0; i < iinfos.length; i++) { - if (iinfos[i].name.equals(name)) - return true; - } - } - } - info = info.getSuperclass(); - } - return false; - } - public ClassAnalyzer(Object parent, ClassInfo clazz, ImportHandler imports) { @@ -88,6 +53,7 @@ public class ClassAnalyzer implements Analyzer, Scope { this.parent = parent; this.clazz = clazz; this.imports = imports; + modifiers = clazz.getModifiers(); name = clazz.getName(); if (parent != null) { @@ -107,6 +73,7 @@ public class ClassAnalyzer implements Analyzer, Scope { + clazz.getName()); } name = outerInfos[0].name; + modifiers = outerInfos[0].modifiers; } else { name = clazz.getName(); int dot = name.lastIndexOf('.'); @@ -120,6 +87,10 @@ public class ClassAnalyzer implements Analyzer, Scope { this(null, clazz, imports); } + public final boolean isStatic() { + return Modifier.isStatic(modifiers); + } + public FieldAnalyzer getField(String fieldName, Type fieldType) { for (int i=0; i< fields.length; i++) { if (fields[i].getName().equals(fieldName) @@ -136,8 +107,7 @@ public class ClassAnalyzer implements Analyzer, Scope { && methods[i].getType().equals(methodType)) return methods[i]; } - throw new NoSuchElementException - ("Method "+methodType+" "+clazz.getName()+"."+methodName); + return null; } public Object getParent() { @@ -243,7 +213,7 @@ public class ClassAnalyzer implements Analyzer, Scope { return; } writer.pushScope(this); - int modifiedModifiers = clazz.getModifiers() & ~Modifier.SYNCHRONIZED; + int modifiedModifiers = modifiers & ~Modifier.SYNCHRONIZED; if (clazz.isInterface()) modifiedModifiers &= ~Modifier.ABSTRACT; String modif = Modifier.toString(modifiedModifiers); @@ -259,18 +229,21 @@ public class ClassAnalyzer implements Analyzer, Scope { if (interfaces.length == 1 && (superClazz == null || superClazz == ClassInfo.javaLangObject)) { - writer.print(writer.getClassString(interfaces[0])); + writer.print(writer.getClassString(interfaces[0], + Scope.CLASSNAME)); } else { if (interfaces.length > 0) { writer.print("/*too many supers*/ "); for (int i=0; i< interfaces.length; i++) - writer.print(writer.getClassString(interfaces[i])+","); + writer.print(writer.getClassString + (interfaces[i], Scope.CLASSNAME) + ","); } if (superClazz == null) writer.print(writer.getClassString - (ClassInfo.javaLangObject)); + (ClassInfo.javaLangObject, Scope.CLASSNAME)); else - writer.print(writer.getClassString(superClazz)); + writer.print(writer.getClassString + (superClazz, Scope.CLASSNAME)); } } else { writer.println(name); @@ -278,7 +251,8 @@ public class ClassAnalyzer implements Analyzer, Scope { ClassInfo superClazz = clazz.getSuperclass(); if (superClazz != null && superClazz != ClassInfo.javaLangObject) { - writer.println("extends "+writer.getClassString(superClazz)); + writer.println("extends " + (writer.getClassString + (superClazz, Scope.CLASSNAME))); } ClassInfo[] interfaces = clazz.getInterfaces(); if (interfaces.length > 0) { @@ -286,7 +260,8 @@ public class ClassAnalyzer implements Analyzer, Scope { for (int i=0; i < interfaces.length; i++) { if (i > 0) writer.print(", "); - writer.print(writer.getClassString(interfaces[i])); + writer.print(writer.getClassString + (interfaces[i], Scope.CLASSNAME)); } writer.println(""); } @@ -312,11 +287,49 @@ public class ClassAnalyzer implements Analyzer, Scope { writer.popScope(); } - public String getTypeString(Type type) { - return type.toString(); + public void dumpJavaFile(TabbedPrintWriter writer) + throws java.io.IOException { + imports.init(clazz.getName()); + LocalInfo.init(); + analyze(); + + imports.dumpHeader(writer); + dumpSource(writer); + } + + public boolean isScopeOf(Object obj, int scopeType) { + if (clazz.equals(obj) && scopeType == CLASSSCOPE) + return true; + return false; } - public String getTypeString(Type type, String name) { - return type.toString() + " " + name; + public boolean conflicts(String name, int usageType) { + ClassInfo info = clazz; + while (info != null) { + if (usageType == METHODNAME) { + MethodInfo[] minfos = info.getMethods(); + for (int i = 0; i< minfos.length; i++) + if (minfos[i].getName().equals(name)) + return true; + } + if (usageType == FIELDNAME || usageType == AMBIGUOUSNAME) { + FieldInfo[] finfos = info.getFields(); + for (int i=0; i < finfos.length; i++) { + if (finfos[i].getName().equals(name)) + return true; + } + } + if (usageType == CLASSNAME || usageType == AMBIGUOUSNAME) { + InnerClassInfo[] iinfos = info.getInnerClasses(); + if (iinfos != null) { + for (int i=0; i < iinfos.length; i++) { + if (iinfos[i].name.equals(name)) + return true; + } + } + } + info = info.getSuperclass(); + } + return false; } }