Example #1
0
  /**
   * Override this method to create you own classes on the fly. The name contains the special token
   * $$BCEL$$. Everything before that token is consddered to be a package name. You can encode you
   * own arguments into the subsequent string. You must regard however not to use any "illegal"
   * characters, i.e., characters that may not appear in a Java class name too<br>
   * The default implementation interprets the string as a encoded compressed Java class, unpacks
   * and decodes it with the Utility.decode() method, and parses the resulting byte array and
   * returns the resulting JavaClass object.
   *
   * @param class_name compressed byte code with "$$BCEL$$" in it
   */
  protected JavaClass createClass(String class_name) {
    int index = class_name.indexOf("$$BCEL$$");
    String real_name = class_name.substring(index + 8);

    JavaClass clazz = null;
    try {
      byte[] bytes = Utility.decode(real_name, true);
      ClassParser parser = new ClassParser(new ByteArrayInputStream(bytes), "foo");

      clazz = parser.parse();
    } catch (Throwable e) {
      e.printStackTrace();
      return null;
    }

    // Adapt the class name to the passed value
    ConstantPool cp = clazz.getConstantPool();

    ConstantClass cl =
        (ConstantClass) cp.getConstant(clazz.getClassNameIndex(), Constants.CONSTANT_Class);
    ConstantUtf8 name = (ConstantUtf8) cp.getConstant(cl.getNameIndex(), Constants.CONSTANT_Utf8);
    name.setBytes(class_name.replace('.', '/'));

    return clazz;
  }
Example #2
0
  /** Machine-generated. */
  public void pass4Button_ActionPerformed(java.awt.event.ActionEvent actionEvent) {

    pass2Button_ActionPerformed(actionEvent);

    Color color = Color.green;

    Verifier v = VerifierFactory.getVerifier(class_name);
    VerificationResult vr = v.doPass2();
    if (vr.getStatus() == VerificationResult.VERIFIED_OK) {
      JavaClass jc = Repository.lookupClass(class_name);
      int nr = jc.getMethods().length;
      for (int i = 0; i < nr; i++) {
        vr = v.doPass3b(i);
        if (vr.getStatus() != VerificationResult.VERIFIED_OK) {
          color = Color.red;
          break;
        }
      }
    } else {
      color = Color.yellow;
    }

    getPass3Panel().setBackground(color);
    getPass3Panel().repaint();
  }
Example #3
0
 public void run() {
   JavaClass clazz = snapshot.findClass(query);
   String instancesOf;
   if (newObjects) instancesOf = "New instances of ";
   else instancesOf = "Instances of ";
   if (includeSubclasses) {
     startHtml(instancesOf + query + " (including subclasses)");
   } else {
     startHtml(instancesOf + query);
   }
   if (clazz == null) {
     error("Class not found");
   } else {
     out.print("<strong>");
     printClass(clazz);
     out.print("</strong><br><br>");
     Enumeration objects = clazz.getInstances(includeSubclasses);
     long totalSize = 0;
     long instances = 0;
     while (objects.hasMoreElements()) {
       JavaHeapObject obj = (JavaHeapObject) objects.nextElement();
       if (newObjects && !obj.isNew()) continue;
       printThing(obj);
       out.println("<br>");
       totalSize += obj.getSize();
       instances++;
     }
     out.println(
         "<h2>Total of " + instances + " instances occupying " + totalSize + " bytes.</h2>");
   }
   endHtml();
 }
 public static boolean isCompiledKotlinPackageClass(@NotNull JavaClass javaClass) {
   if (javaClass.getOriginKind() == JavaClass.OriginKind.COMPILED) {
     return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE) != null
         || javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE_FRAGMENT) != null;
   }
   return false;
 }
Example #5
0
  /**
   * Write contents of the given JavaClass into HTML files.
   *
   * @param java_class The class to write
   * @param dir The directory to put the files in
   */
  public Class2HTML(JavaClass java_class, String dir) throws IOException {
    Method[] methods = java_class.getMethods();

    this.java_class = java_class;
    this.dir = dir;
    class_name = java_class.getClassName(); // Remember full name
    constant_pool = java_class.getConstantPool();

    // Get package name by tacking off everything after the last `.'
    int index = class_name.lastIndexOf('.');
    if (index > -1) class_package = class_name.substring(0, index);
    else class_package = ""; // default package

    ConstantHTML constant_html =
        new ConstantHTML(dir, class_name, class_package, methods, constant_pool);

    /* Attributes can't be written in one step, so we just open a file
     * which will be written consequently.
     */
    AttributeHTML attribute_html = new AttributeHTML(dir, class_name, constant_pool, constant_html);

    // MethodHTML method_html = new MethodHTML(dir, class_name, methods, java_class.getFields(),
    //				    constant_html, attribute_html);
    // Write main file (with frames, yuk)
    writeMainHTML(attribute_html);
    new CodeHTML(dir, class_name, methods, constant_pool, constant_html);
    attribute_html.close();
  }
  @Test
  public void shouldReturnUnparsableClassIfClassCannotBeFound() {
    JavaClass javaClass = builder.createClass("foo.bar.com");

    assertThat(javaClass).isInstanceOf(UnparsableClass.class);
    assertThat(javaClass.getName()).isEqualTo("foo.bar.com");
    assertThat(javaClass.getImports()).isEmpty();
  }
 public Set<String> getIndexedClasses() {
   Set<String> classes = newHashSet();
   Set<JavaClass> vertexSet = graph.vertexSet();
   for (JavaClass each : vertexSet) {
     classes.add(each.getName());
   }
   return classes;
 }
 private JavaClass findClass(String classname) {
   for (JavaClass jClass : graph.vertexSet()) {
     if (jClass.getName().equals(classname)) {
       return jClass;
     }
   }
   return null;
 }
 private void updateParentReferences(JavaClass parentClass) {
   for (String child : parentClass.getImports()) {
     JavaClass childClass = findJavaClass(child);
     if ((childClass != null) && !childClass.equals(parentClass)) {
       if (graph.containsVertex(childClass)) {
         graph.addEdge(parentClass, childClass);
       }
     }
   }
 }
 public JavaClass findJavaClass(String classname) {
   JavaClass clazz = findClass(classname);
   if (clazz == null) {
     clazz = builder.getClass(classname);
     if (clazz.locatedInClassFile()) {
       addToIndex(clazz);
     }
   }
   return clazz;
 }
Example #11
0
  private String parseClassName() throws IOException {
    int entryIndex = in.readUnsignedShort();
    String clazzName = getClassConstantName(entryIndex);
    jClass.setName(clazzName);
    jClass.setPackageName(getPackageName(clazzName));

    debug("Parser: class name = " + clazzName);
    debug("Parser: package name = " + getPackageName(clazzName));

    return clazzName;
  }
 /**
  * getParentType - return the Class which corresponds to our parent JavaClass we're going to do
  * this a lot, so cache it.
  */
 protected Class getParentType() {
   if (parentType == null) {
     Field targetField = (Field) getTarget();
     JavaClass parentJavaClass = targetField.getJavaClass();
     JavaClassJDKAdaptor pa =
         (JavaClassJDKAdaptor)
             EcoreUtil.getAdapter(parentJavaClass.eAdapters(), ReadAdaptor.TYPE_KEY);
     if (pa != null) parentType = pa.getSourceType();
   }
   return parentType;
 }
  private void importInheritances(DbJVClass dbClaz, JavaClass claz) throws DbException {
    String qualifiedName = claz.getSuperclassName();
    if (!"java.lang.Object".equals(qualifiedName)) {
      importInheritance(dbClaz, qualifiedName, false);
    }

    String[] qualifiedNames = claz.getInterfaceNames();
    for (String qn : qualifiedNames) {
      importInheritance(dbClaz, qn, true);
    } // end for
  }
Example #14
0
    public void visitJavaClass(JavaClass clazz) {

      super.visitJavaClass(clazz);
      JopClassInfo cli = (JopClassInfo) this.cli;

      cpool = clazz.getConstantPool();

      if (clazz.isInterface()) {
        cli.interfaceID = ++cli.interfaceCnt;
        cli.interfaceList.add(cli.interfaceID - 1, clazz.getClassName());
      }
    }
Example #15
0
  @Override
  protected void doWithResourceDocument(ResourceDocument document, Class<?> classOfResource) {
    // Check if the class is present in the builder.
    if (javaDocBuilder.getClassByName(classOfResource.getName()) == null)
      throw new IllegalArgumentException(
          "Class " + classOfResource + " was not found within the specified source files.");

    JavaClass javaClass = javaDocBuilder.getClassByName(classOfResource.getName());

    document.setDescription(javaClass.getComment());
    document.setTitle(titleOrNull(javaClass));
  }
  private DbJVClass importClass(JavaClass claz, Controller controller) throws DbException {

    String packName = claz.getPackageName();
    String qualifiedName = claz.getClassName();
    int idx = qualifiedName.lastIndexOf('.');
    String classname = qualifiedName.substring(idx + 1);
    DbJVClass dbClaz = null;

    try {
      if (m_classModel != null) {
        DbJVPackage pack = findPackageByName(packName);

        // create class or interface
        int value = claz.isInterface() ? JVClassCategory.INTERFACE : JVClassCategory.CLASS;
        JVClassCategory catg = JVClassCategory.getInstance(value);
        dbClaz =
            (pack == null) ? new DbJVClass(this.m_classModel, catg) : new DbJVClass(pack, catg);
        dbClaz.setName(classname);

        // set class modifiers
        dbClaz.setAbstract(claz.isAbstract());
        dbClaz.setFinal(claz.isFinal());
        dbClaz.setStatic(claz.isStatic());
        dbClaz.setStrictfp(claz.isStrictfp());
        dbClaz.setVisibility(toVisibility(claz));

        // create inheritances
        importInheritances(dbClaz, claz);

        // create fields
        if (m_params.createFields) {
          Field[] fields = claz.getFields();
          for (Field field : fields) {
            importField(dbClaz, field);
          }
        }

        // create methods
        if (m_params.createMethods) {
          Method[] methods = claz.getMethods();
          for (Method method : methods) {
            importMethod(dbClaz, method);
          }
        }

        // keep user informed of progression
        String pattern = LocaleMgr.misc.getString("0SuccessfullyCreated");
        String msg = MessageFormat.format(pattern, qualifiedName);
        controller.println(msg);
      } // end if
    } catch (DbException ex) {
      controller.println(ex.toString());
    } // end try

    return dbClaz;
  } // end importClass()
Example #17
0
  public void visitJavaClass(JavaClass clazz) {
    clazz.accept(visitor);

    Field[] fields = clazz.getFields();
    for (int i = 0; i < fields.length; i++) fields[i].accept(this);

    Method[] methods = clazz.getMethods();
    for (int i = 0; i < methods.length; i++) methods[i].accept(this);

    Attribute[] attributes = clazz.getAttributes();
    for (int i = 0; i < attributes.length; i++) attributes[i].accept(this);

    clazz.getConstantPool().accept(this);
  }
  @NotNull
  public static Collection<JavaClass> getClassesInPackage(@NotNull JavaPackage javaPackage) {
    Collection<JavaClass> classes = javaPackage.getClasses();
    Set<FqName> addedQualifiedNames = new HashSet<FqName>(classes.size());
    List<JavaClass> result = new ArrayList<JavaClass>(classes.size());

    for (JavaClass javaClass : classes) {
      FqName fqName = javaClass.getFqName();
      if (fqName != null && addedQualifiedNames.add(fqName)) {
        result.add(javaClass);
      }
    }

    return result;
  }
Example #19
0
  @JRubyMethod
  public static IRubyObject to_java(
      ThreadContext context, IRubyObject fromObject, IRubyObject type) {
    if (type.isNil()) {
      return to_java(context, fromObject);
    }

    Ruby runtime = context.runtime;
    JavaClass targetType = getTargetType(context, runtime, type);

    if (fromObject instanceof RubyArray) {
      return targetType.javaArrayFromRubyArray(context, fromObject);
    } else {
      return Java.getInstance(runtime, fromObject.toJava(targetType.javaClass()));
    }
  }
Example #20
0
 /**
  * Removes a file with a given name and its related files.
  *
  * @param pathname the name of the file to be removed
  */
 public void removeJavaFile(String pathname) {
   for (JavaFile jf : getJavaFiles()) {
     if (pathname.compareTo(jf.getPath()) == 0) {
       JavaClass.removeClassesRelatedTo(jf);
     }
   }
   cleanJavaProjects();
 }
Example #21
0
  /** Removes every information about this project stored in the cache. */
  public static void removeAllCache() {
    for (JavaProject jproj : cache.values()) {
      jproj.getJavaPackages().clear();
    }
    cache.clear();

    JavaClass.removeAllClassesInCache();
  }
  /**
   * Translates the body of the package and writes it to the output stream.
   *
   * @param out The output stream.
   * @return The output stream.
   */
  public Printer translate(Printer out) {
    // Include the header file
    out.p("#include \"").p(getFilename()).pln(".h\"").pln();

    // Print the array template specializations for the classes in this package
    out.pln("namespace __rt {").incr();
    for (JavaFile f : files) {
      for (JavaClass cls : f.getClasses()) {
        cls.translateArrayTemplate(out);
      }
    }
    out.decr().pln("}").pln();

    // Add the namespace
    for (String part : pkg) {
      out.indent().p("namespace ").p(part).pln(" {").incr();
    }

    // Print all the files in the package
    for (JavaFile f : files) {
      for (JavaClass cls : f.getClasses()) {
        cls.translate(out).pln();
      }
      out.pln();
    }

    // Close the namespace
    for (int i = 0; i < pkg.size(); i++) {
      out.decr().indent().pln("}");
    }

    // If this package contains the main file, print the main method here
    if (null != main) {
      out.pln("int main(int argc, char *argv[]) {").incr();
      out.indent().pln("__rt::Ptr<__rt::Array<String> > args = new __rt::Array<String>(argc-1);");
      out.indent().pln("for (int i = 1; i < argc; i++) {").incr();
      out.indent().pln("(*args)[i-1] = __rt::literal(argv[i]);");
      out.decr().indent().pln("}");
      out.indent();
      if (!getNamespace().equals("")) out.p(getNamespace()).p("::");
      out.p("__").p(main.getPublicClass().getName()).pln("::main$array1_String(args);");
      out.decr().pln("}");
    }

    return out;
  }
  @Test
  public void shouldLookForClassesInTargetDirectories() throws Exception {
    newDir = new File("tempClassDir");
    List<File> buildPaths = asList(newDir);
    ClasspathProvider classpath =
        new StandaloneClasspath(
            buildPaths,
            FakeEnvironments.systemClasspath() + pathSeparator + newDir.getAbsolutePath());

    String classname = "org.fakeco.Foobar";
    createClass(classname);

    builder = new JavaClassBuilder(classpath);
    JavaClass javaClass = builder.createClass(classname);
    assertEquals(classname, javaClass.getName());
    assertFalse(javaClass.isATest());
  }
Example #24
0
  protected void checkClass(JavaClass c) {
    enclosingScopes.push(c);

    for (Decl d : c.declarations()) {
      checkDeclaration(d);
    }

    enclosingScopes.pop();
  }
Example #25
0
  /**
   * Constructor is only used by following two factory methods: getTemplate for the dispatch of the
   * creation with newClassInfo
   *
   * @param clazz
   * @param ai
   */
  private JopClassInfo(JavaClass clazz, OldAppInfo ai) {
    super(clazz, ai);
    methodsAddress = 0;
    cpoolAddress = 0;
    instSize = 0;
    instGCinfo = 0;
    cpoolUsed = new LinkedList<Integer>();

    // the template class info is created with a null pointer
    if (clazz != null) {
      if (clazz.getClassName().equals(JOPizer.stringClass)) {
        StringInfo.cli = this;
      }
      if (clazz.getClassName().equals(JOPizer.objectClass)) {
        nrObjMethods = clazz.getMethods().length;
      }
    }
  }
Example #26
0
  protected Class loadClass(String class_name, boolean resolve) throws ClassNotFoundException {
    Class cl = null;

    /* First try: lookup hash table.
     */
    if ((cl = (Class) classes.get(class_name)) == null) {
      /* Second try: Load system class using system class loader. You better
       * don't mess around with them.
       */
      for (int i = 0; i < ignored_packages.length; i++) {
        if (class_name.startsWith(ignored_packages[i])) {
          cl = deferTo.loadClass(class_name);
          break;
        }
      }

      if (cl == null) {
        JavaClass clazz = null;

        /* Third try: Special request?
         */
        if (class_name.indexOf("$$BCEL$$") >= 0) clazz = createClass(class_name);
        else { // Fourth try: Load classes via repository
          if ((clazz = repository.loadClass(class_name)) != null) {
            clazz = modifyClass(clazz);
          } else throw new ClassNotFoundException(class_name);
        }

        if (clazz != null) {
          byte[] bytes = clazz.getBytes();
          cl = defineClass(class_name, bytes, 0, bytes.length);
        } else // Fourth try: Use default class loader
        cl = Class.forName(class_name);
      }

      if (resolve) resolveClass(cl);
    }

    classes.put(class_name, cl);

    return cl;
  }
  /**
   * Dumps the contents of the specified class to the specified directory. The file is named
   * dump_dir/[class].bcel. It contains a synopsis of the fields and methods followed by the jvm
   * code for each method.
   *
   * @param jc javaclass to dump
   * @param dump_dir directory in which to write the file
   */
  public static void dump(JavaClass jc, File dump_dir) {

    try {
      dump_dir.mkdir();
      File path = new File(dump_dir, jc.getClassName() + ".bcel");
      PrintStream p = new PrintStream(path);

      // Print the class, super class and interfaces
      p.printf("class %s extends %s\n", jc.getClassName(), jc.getSuperclassName());
      String[] inames = jc.getInterfaceNames();
      if ((inames != null) && (inames.length > 0)) {
        p.printf("   ");
        for (String iname : inames) p.printf("implements %s ", iname);
        p.printf("\n");
      }

      // Print each field
      p.printf("\nFields\n");
      for (Field f : jc.getFields()) p.printf("  %s\n", f);

      // Print the signature of each method
      p.printf("\nMethods\n");
      for (Method m : jc.getMethods()) p.printf("  %s\n", m);

      // If this is not an interface, print the code for each method
      if (!jc.isInterface()) {
        for (Method m : jc.getMethods()) {
          p.printf("\nMethod %s\n", m);
          Code code = m.getCode();
          if (code != null) p.printf("  %s\n", code.toString().replace("\n", "\n  "));
        }
      }

      // Print the details of the constant pool.
      p.printf("Constant Pool:\n");
      ConstantPool cp = jc.getConstantPool();
      Constant[] constants = cp.getConstantPool();
      for (int ii = 0; ii < constants.length; ii++) {
        p.printf("  %d %s\n", ii, constants[ii]);
      }

      p.close();

    } catch (Exception e) {
      throw new Error("Unexpected error dumping javaclass", e);
    }
  }
  protected String formatJavaTerms(
      String fileName,
      String absolutePath,
      String content,
      String javaClassContent,
      List<String> javaTermSortExclusions,
      List<String> testAnnotationsExclusions)
      throws Exception {

    JavaClass javaClass = new JavaClass(fileName, absolutePath, javaClassContent, StringPool.TAB);

    String newJavaClassContent =
        javaClass.formatJavaTerms(javaTermSortExclusions, testAnnotationsExclusions);

    if (!javaClassContent.equals(newJavaClassContent)) {
      return StringUtil.replaceFirst(content, javaClassContent, newJavaClassContent);
    }

    return content;
  }
Example #29
0
 private void doExposePageLoadMethod(JavaClass jc) {
   boolean hitOne = false;
   for (Iterator itr = jc.findMethodsByName("Page_Load").iterator(); itr.hasNext(); ) {
     JavaMethod jm = (JavaMethod) itr.next();
     jm.addModifier(JavaKeywords.J_PUBLIC);
     hitOne = true;
   }
   if (!hitOne) {
     throw new RuntimeException(jc + " is a form class, but has no Page_Load method...");
   }
 }
Example #30
0
  private static JavaClass getTargetType(ThreadContext context, Ruby runtime, IRubyObject type) {
    JavaClass targetType;

    if (type instanceof RubyString || type instanceof RubySymbol) {
      targetType = runtime.getJavaSupport().getNameClassMap().get(type.asJavaString());
      if (targetType == null) targetType = JavaClass.forNameVerbose(runtime, type.asJavaString());
    } else if (type instanceof RubyModule && type.respondsTo("java_class")) {
      targetType = (JavaClass) Helpers.invoke(context, type, "java_class");
    } else if (type instanceof JavaProxy) {
      if (((JavaProxy) type).getObject() instanceof Class) {
        targetType = JavaClass.get(runtime, (Class) ((JavaProxy) type).getObject());
      } else {
        throw runtime.newTypeError("not a valid target type: " + type);
      }
    } else {
      throw runtime.newTypeError("unable to convert to type: " + type);
    }

    return targetType;
  }