/** {@inheritDoc} */ public void convert(Klass klass) { lastClassNameStack.push(klass.getName()); int state = klass.getState(); if (state < Klass.STATE_CONVERTING) { if (klass.isArray()) { convert(Klass.OBJECT); klass.changeState(Klass.STATE_CONVERTED); } else { traceProgress(); ClassFile classFile = getClassFile(klass); classFile.convertPhase1(this, translationStrategy != BY_METHOD); if (klass.hasGlobalStatics()) { // record globals now. recordGlobalStatics(klass); } if (translationStrategy == BY_METHOD || translationStrategy == BY_CLASS) { // if NOT inlining, then generate squawk code now. classFile.convertPhase2(this, translationStrategy == BY_METHOD); classFiles.remove(klass.getName()); } } } lastClassNameStack.pop(); }
/** * Returns a list containing each {@link Method} declared directly in this type. Inherited methods * are not included. Constructors, the initialization method if any, and any synthetic methods * created by the compiler are included in the list. * * <p>For arrays and primitive classes, the returned list is always empty. * * @return a list {@link Method} objects; the list has length 0 if no methods exist. */ public List getMethods() { if (methods == null) { if (klass.isArray()) { methods = Collections.EMPTY_LIST; } else { methods = new ArrayList(); addMethods(methods, true); addMethods(methods, false); } } return methods; }
/** * Gets the fully qualified name of this type. The returned name is formatted as it might appear * in a Java programming language declaration for objects of this type. * * <p>For primitive classes the returned name is the name of the corresponding primitive type; for * example, "int" is returned as the name of the class represented by {@link * java.lang.Integer#TYPE Integer.TYPE}. * * @return a string containing the type name. */ public String getName() { String name = klass.getName(); if (!klass.isArray()) { return name; } int dimensions = 0; while (name.charAt(dimensions) == '[') { ++dimensions; } name = name.substring(dimensions); char first = name.charAt(0); if (first == 'L') { name = name.substring(1, name.length() - 2).replace('/', '.'); } else { switch (first) { case 'I': name = "int"; break; case 'J': name = "long"; break; case 'F': name = "float"; break; case 'D': name = "double"; break; case 'Z': name = "boolean"; break; case 'C': name = "char"; break; case 'S': name = "short"; break; case 'B': name = "byte"; break; case 'V': name = "void"; break; } } while (dimensions-- != 0) { name += "[]"; } return name; }
/** {@inheritDoc} */ public void load(Klass klass) { Assert.that(VM.isHosted() || VM.getCurrentIsolate().getLeafSuite() == suite); int state = klass.getState(); if (state < Klass.STATE_LOADED) { if (klass.isArray()) { load(klass.getComponentType()); } else { lastClassNameStack.push(klass.getName()); ClassFile classFile = getClassFile(klass); load(classFile); lastClassNameStack.pop(); } } }