Пример #1
0
 @Test
 public void parameters_as_return() throws IOException {
   JClass c = new JClass("test", "MyClass");
   c.addMethod("getValue", new JClass("test.api", "Model").addParameter(String.class))
       .addContent("return null;");
   assertJClass(c, "/jclass/ParametersAsReturn.java", "parameters_as_return");
 }
Пример #2
0
 @Test
 public void referenceName_two_parameters() {
   JClass c =
       new JClass("test", "MyClass")
           .addParameter(new JClass("test.api", "Model"))
           .addParameter(String.class);
   assertEquals("MyClass<Model,String>", c.getReferenceName());
 }
Пример #3
0
 @Test
 public void parameters_as_param() throws IOException {
   JClass c = new JClass("test", "MyClass");
   c.addMethod("setValue")
       .addParam(new JClass("test.api", "Model").addParameter(String.class), "value")
       .addContent("// Nothing");
   assertJClass(c, "/jclass/ParametersAsParam.java", "parameters_as_param");
 }
  /** Returns true if equals. */
  public boolean equals(Object o) {
    if (o == this) return true;
    else if (o == null || getClass() != o.getClass()) return false;

    JClass jClass = (JClass) o;

    // note that the equality test doesn't include the class loader
    return getName().equals(jClass.getName());
  }
Пример #5
0
 /** Primitive type as an import */
 @Test
 public void primitive_as_import() throws IOException {
   JClass intClass = new JClass(Integer.TYPE);
   JClass hostClass = new JClass("test", "Test");
   hostClass.addImport(intClass);
   Set<String> imports = hostClass.getImportNames();
   assertNotNull(imports);
   assertTrue(imports.isEmpty());
 }
Пример #6
0
  /** Removes a class from this package. */
  public void remove(JClass c) {
    if (c._package() != this)
      throw new IllegalArgumentException(
          "the specified class is not a member of this package," + " or it is a referenced class");

    // note that c may not be a member of classes.
    // this happens when someone is trying to remove a non generated class
    classes.remove(c.name());
    if (upperCaseClassMap != null) upperCaseClassMap.remove(c.name().toUpperCase());
  }
Пример #7
0
  protected String jToSql(String javaName, JClass currentClass)
      throws IOException, SchemaException {
    JField jf = currentClass.getFieldByName(javaName);
    if (jf == null)
      throw new SchemaException(
          "field " + javaName + " not a member of class " + currentClass.getClassName(),
          currentClass.getSchemaFileName());

    return jf.getSqlName();
  }
Пример #8
0
 /**
  * Tests that spacing is correct.
  *
  * @throws IOException
  */
 @Test
 public void spacing() throws IOException {
   // Class structure
   JClass c = new JClass("sido.test", "Test");
   c.addImport(List.class);
   c.addImport(ArrayList.class);
   c.addField("String", "name");
   c.addField("List<String>", "otherNames").setInitialisation("new ArrayList<String>()");
   c.addConstructor();
   c.addConstructor().addParam("String", "value").addContent("this.name = value;");
   c.addMethod("getName", "String").addContent("return name;");
   c.addMethod("setName").addParam("String", "value").addContent("this.name = value;");
   // Output
   StringWriter s = new StringWriter();
   PrintWriter writer = new PrintWriter(s);
   // Generation
   c.write(writer);
   // Output
   List<String> actual = readLines(s.toString());
   // Gets the expected content
   List<String> expected = readReference("/jclass/Spacing.java");
   // Difference between the two sets
   Patch diff = DiffUtils.diff(expected, actual);
   List<Delta> deltas = diff.getDeltas();
   if (!deltas.isEmpty()) {
     // Creates the diff
     String original = StringUtils.join(expected, "\n");
     String revised = StringUtils.join(actual, "\n");
     List<String> unifiedDiff =
         DiffUtils.generateUnifiedDiff(original, revised, expected, diff, 3);
     String diffDisplay = StringUtils.join(unifiedDiff, "\n");
     System.err.println(diffDisplay);
     fail("spacing");
   }
 }
  private JInvocation buildScopeKey(InjectionNode injectionNode) {
    InjectionSignature signature = injectionNode.getTypeSignature();

    JClass injectionNodeClassRef = generationUtil.ref(injectionNode.getASTType());

    return codeModel
        .ref(ScopeKey.class)
        .staticInvoke(ScopeKey.GET_METHOD)
        .arg(injectionNodeClassRef.dotclass())
        .arg(JExpr.lit(signature.buildScopeKeySignature()));
  }
Пример #10
0
  /* override to insert constraint in table definition */
  protected void writeCheckConstraint(JClass currentClass, String cons_name, JField jf)
      throws IOException {

    constraints +=
        "\nalter table "
            + currentClass.getTableName()
            + " add constraint "
            + cons_name
            + " check ("
            + jf.getSqlName()
            + jf.getConstraint()
            + ");\n";

    cleanupConstraints +=
        "\nalter table " + currentClass.getTableName() + " drop constraint " + cons_name + " ;\n";
  }
Пример #11
0
 public void assertJClass(JClass c, String referenceResourcePath, String testId)
     throws IOException {
   // Output
   StringWriter s = new StringWriter();
   PrintWriter writer = new PrintWriter(s);
   // Generation
   c.write(writer);
   // Output
   List<String> actual = readLines(s.toString());
   // Gets the expected content
   List<String> expected = readReference(referenceResourcePath);
   // Difference between the two sets
   Patch diff = DiffUtils.diff(expected, actual);
   List<Delta> deltas = diff.getDeltas();
   if (!deltas.isEmpty()) {
     // Creates the diff
     String original = StringUtils.join(expected, "\n");
     String revised = StringUtils.join(actual, "\n");
     List<String> unifiedDiff =
         DiffUtils.generateUnifiedDiff(original, revised, expected, diff, 3);
     String diffDisplay = StringUtils.join(unifiedDiff, "\n");
     System.err.println(diffDisplay);
     fail(testId);
   }
 }
Пример #12
0
    protected JMethod(FJBGContext context,
                      JClass owner,
                      int accessFlags,
                      String name,
                      JType returnType,
                      JType[] argTypes,
                      String[] argNames) {
        super(context,
              owner,
              accessFlags,
              name,
              new JMethodType(returnType, argTypes));
        this.argNames = argNames;

        assert argTypes.length == argNames.length;

        if (isAbstract() || isNative()) {
            code = null;
        } else {
            code = context.JCode(owner, this);
            addAttribute(context.JCodeAttribute(owner, this));

            if (!isStatic())
                addNewLocalVariable(owner.getType(), "this");

            for (int i = 0; i < argTypes.length; ++i)
                addNewLocalVariable(argTypes[i], argNames[i]);
        }
    }
Пример #13
0
  /**
   * Adds the given JMethodSignature to this JClass
   *
   * @param jMethodSig the JMethodSignature to add.
   * @throws java.lang.IllegalArgumentException when the given JMethodSignature conflicts with an
   *     existing method signature.
   */
  public void addMethod(JMethodSignature jMethodSig) throws IllegalArgumentException {
    if (jMethodSig == null) {
      String err = "The JMethodSignature cannot be null.";
      throw new IllegalArgumentException(err);
    }

    // -- check method name and signatures *add later*

    // -- keep method list sorted for esthetics when printing
    // -- START SORT :-)
    boolean added = false;
    //        short modifierVal = 0;
    JModifiers modifiers = jMethodSig.getModifiers();
    for (int i = 0; i < methods.size(); i++) {
      JMethodSignature tmp = (JMethodSignature) methods.elementAt(i);
      // -- first compare modifiers
      if (tmp.getModifiers().isProtected()) {
        if (!modifiers.isProtected()) {
          methods.insertElementAt(jMethodSig, i);
          added = true;
          break;
        }
      }
      // -- compare names
      if (jMethodSig.getName().compareTo(tmp.getName()) < 0) {
        methods.insertElementAt(jMethodSig, i);
        added = true;
        break;
      }
    }
    // -- END SORT
    if (!added) methods.addElement(jMethodSig);

    // -- check return type to make sure it's included in the
    // -- import list
    JType jType = jMethodSig.getReturnType();
    if (jType != null) {
      while (jType.isArray()) jType = jType.getComponentType();

      if (!jType.isPrimitive()) addImport(jType.getName());
    }
    // -- check exceptions
    JClass[] exceptions = jMethodSig.getExceptions();
    for (JClass exception : exceptions) {
      addImport(exception.getName());
    }
  } // -- addMethod
 protected JClass createClass(GenerationContext generationContext, SidoType type) {
   JClass c = JClassUtils.createClassRef(generationContext, type);
   // Abstraction?
   if (type.isAbstractType()) {
     c.setAbstractClass(true);
   }
   // Subclass?
   SidoType parentType = type.getParentType();
   if (parentType != null) {
     String parentTypeName = JClassUtils.getSimpleClassName(generationContext, parentType);
     c.setParent(parentTypeName);
     c.addImport(JClassUtils.createClassRef(generationContext, parentType));
   }
   // Constructors
   generateConstructors(c, generationContext, type);
   // OK
   return c;
 }
Пример #15
0
  protected void writeForeignKey(
      JClass currentClass, String cons_name, JField jf, JClass foreignClass) throws IOException {

    constraints +=
        "\nalter table "
            + currentClass.getTableName()
            + " add constraint "
            + cons_name
            + " foreign key ("
            + jf.getSqlName()
            + ") references "
            + foreignClass.getTableName()
            + "("
            + foreignClass.getPrimaryKey()
            + ");\n";
    cleanupConstraints +=
        "\nalter table " + currentClass.getTableName() + " drop constraint " + cons_name + " ;\n";
  }
Пример #16
0
 protected void addIndex(JClass currentClass, String sOut, JIndex index) {
   constraints +=
       "\ncreate index "
           + index.getName()
           + " on "
           + currentClass.getTableName()
           + " ("
           + sOut
           + ");\n";
 }
Пример #17
0
  private static void processToString(JDefinedClass packetClass, JCodeModel codeModel) {
    JClass string = codeModel.ref(String.class);
    JClass stringBuilder = codeModel.ref(StringBuilder.class);
    JClass arrays = codeModel.ref(Arrays.class);

    JMethod toStringMeth = packetClass.method(JMod.PUBLIC, String.class, "toString");
    toStringMeth.annotate(Override.class);
    JBlock body = toStringMeth.body();

    JVar stringBuilderVar = body.decl(stringBuilder, "sb");
    stringBuilderVar =
        stringBuilderVar.init(JExpr._new(stringBuilder).arg(packetClass.name() + "["));

    JInvocation appendChain = null;

    for (JFieldVar fieldVar : packetClass.fields().values()) {
      if (appendChain != null) {
        // a comma is needed
        appendChain = appendChain.invoke("append").arg("," + fieldVar.name() + "=");
      } else {
        appendChain = stringBuilderVar.invoke("append").arg(fieldVar.name() + "=");
      }

      // now add the field to the toString output
      JExpression expression =
          fieldVar.type().isArray()
              ? arrays.staticInvoke("toString").arg(JExpr._this().ref(fieldVar.name()))
              : fieldVar.type().isReference()
                  ? JExpr._this().ref(fieldVar.name()).invoke("toString")
                  : JExpr._this().ref(fieldVar.name());

      appendChain = appendChain.invoke("append").arg(expression);
    }

    if (appendChain != null) {
      appendChain = appendChain.invoke("append").arg("]");
    } else {
      appendChain = stringBuilderVar.invoke("append").arg("]");
    }

    body.add(appendChain);
    body._return(stringBuilderVar.invoke("toString"));
  }
  /**
   * Create a new dependency with a given digest.
   *
   * @param cl the source class
   * @param digest the MD5 digest
   */
  public JClassDependency(JClass cl, String digest) {
    _className = cl.getName();

    String newDigest = getDigest();

    if (!newDigest.equals(digest)) {
      if (log.isLoggable(Level.FINE)) log.fine(_className + " digest is modified.");

      _isDigestModified = true;
    }
  }
Пример #19
0
  public void inlineField(JClass currentClass, JCompositeField jcf, HashSet fieldNames)
      throws IOException, SchemaException {

    JClass fieldClass = jcf.getJClass();
    Vector fields = new Vector(fieldClass.getAllFields().values());
    String primaryKey = fieldClass.getPrimaryKey();
    String prefix = jcf.getPrefix();
    for (int i = 0; i < fields.size(); i++) {
      JField jf = (JField) fields.elementAt(i);
      String sqlName = jf.getSqlName();

      if (!jf.isDbColumn() || sqlName.equals(primaryKey)) {
        // do nothing ..
      } else if (jf instanceof JCompositeField) {
        throw new SchemaException(
            "Composite Fields not allowed in inline objects", currentClass.getSchemaFileName());
      } else
        schemaFile.write(",\n\t" + prefix + "_" + sqlName + " " + getSqlOutType(currentClass, jf));
      fieldNames.add(prefix + "_" + sqlName);
    }
  }
Пример #20
0
    private Refs(JCodeModel m, String packageName, String layoutName, String superclass) {
      this.m = m;
      this.packageName = packageName;
      this.layoutName = layoutName;

      viewHolder = m.ref(superclass);
      viewClass = m.ref("android.view.View");
      androidRClass = m.ref("android.R");
      rClass = m.ref(packageName + ".R");
      nullableAnnotation = m.ref("android.support.annotation.Nullable");
      overrideAnnotation = m.ref("java.lang.Override");
      layoutRef = rClass.staticRef("layout").ref(layoutName);
    }
Пример #21
0
 protected void addConstraint(
     JClass currentClass, String consName, JConstraint jcons, String sOut) {
   constraints +=
       "\nalter table "
           + currentClass.getTableName()
           + " add constraint "
           + consName
           + " "
           + jcons.getType()
           + " ("
           + sOut
           + ");\n";
 }
Пример #22
0
 protected String convertFields(String fields, JClass currentClass)
     throws SchemaException, IOException {
   Vector tokens = Tokenizer.tokenize(fields, ",", "/");
   Debugger.trace(fields + " token-size=" + tokens.size(), Debugger.VERBOSE);
   String sOut;
   if (tokens == null || tokens.size() < 1)
     throw new SchemaException(
         "Invalid constraint specification ", currentClass.getSchemaFileName());
   else sOut = jToSql((String) tokens.elementAt(0), currentClass);
   for (int j = 1; j < tokens.size(); j++) {
     sOut += "," + jToSql((String) tokens.elementAt(j), currentClass);
   }
   return sOut;
 }
Пример #23
0
    /**
     * Parses '&lt;T1,T2,...,Tn>'
     *
     * @return the index of the character next to '>'
     */
    private JClass parseArguments(JClass rawType) throws ClassNotFoundException {
      if (s.charAt(idx) != '<') throw new IllegalArgumentException();
      idx++;

      List<JClass> args = new ArrayList<JClass>();

      while (true) {
        args.add(parseTypeName());
        if (idx == s.length()) throw new IllegalArgumentException("Missing '>' in " + s);
        char ch = s.charAt(idx);
        if (ch == '>') return rawType.narrow(args.toArray(new JClass[args.size()]));

        if (ch != ',') throw new IllegalArgumentException(s);
        idx++;
      }
    }
Пример #24
0
    /** Parses additional left-associative suffixes, like type arguments and array specifiers. */
    private JClass parseSuffix(JClass clazz) throws ClassNotFoundException {
      if (idx == s.length()) return clazz; // hit EOL

      char ch = s.charAt(idx);

      if (ch == '<') return parseSuffix(parseArguments(clazz));

      if (ch == '[') {
        if (s.charAt(idx + 1) == ']') {
          idx += 2;
          return parseSuffix(clazz.array());
        }
        throw new IllegalArgumentException("Expected ']' but found " + s.substring(idx + 1));
      }

      return clazz;
    }
Пример #25
0
  private void checkJCompUnit() {
    JCompUnit unit = new JCompUnit("com.acme", "JCompUnitTest.java");

    JClass testClass = new JClass("Test");

    testClass.addImport("java.util.Vector");
    testClass.addMember(new JField(JType.INT, "x"));

    JField field = null;
    field = new JField(JType.INT, "_z");
    field.getModifiers().setStatic(true);
    testClass.addField(field);

    testClass.getStaticInitializationCode().add("_z = 75;");

    JClass jcString = new JClass("String");
    field = new JField(jcString, "myString");
    field.getModifiers().makePrivate();
    testClass.addMember(field);

    // -- create constructor
    JConstructor cons = testClass.createConstructor();
    testClass.addConstructor(cons);
    cons.getSourceCode().add("this.x = 6;");

    JMethod jMethod = new JMethod("getX", JType.INT, null);
    jMethod.setSourceCode("return this.x;");
    testClass.addMethod(jMethod);

    unit.addClass(testClass);

    JClass fooClass = new JClass("Foo");
    unit.addClass(fooClass);

    unit.print(getOutputDirectory().toString(), null);

    assertTrue(new File(getOutputDirectory(), "com/acme/JCompUnitTest.java").exists());
  }
Пример #26
0
  public JAttribute newInstance(JClass clazz, Object owner, DataInputStream stream)
      throws IOException {
    String name = clazz.getConstantPool().lookupUtf8(stream.readShort());
    Integer size = new Integer(stream.readInt());
    Constructor constr = (Constructor) constructors.get(name);
    if (constr == null) constr = defaultConstructor;

    Object[] args = new Object[] {context, clazz, owner, name, size, stream};
    try {
      return (JAttribute) constr.newInstance(args);
    } catch (InstantiationException e) {
      throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
      throw new RuntimeException(e);
    } catch (InvocationTargetException e) {
      throw new RuntimeException(e);
    }
  }
Пример #27
0
  /* write the schema line for one field*/
  protected void writeFieldSchema(
      JClass currentClass, JField jf, String primaryKey, boolean is_first)
      throws IOException, SchemaException {
    String sqlName = jf.getSqlName();
    String fieldType = jf.getSqlType();

    String sep = is_first ? "" : ",";
    if (sqlName.equals(primaryKey)) {
      schemaFile.write(sep);
      writePrimaryKey(currentClass, sqlName);
    } else {
      schemaFile.write(sep + "\n\t" + sqlName + " " + getSqlOutType(currentClass, jf));
      if (jf.isUnique()) writeUniqueConstraint(currentClass, jf);
      if (jf.isRequired()) schemaFile.write(" not null");
      else {
        String dbSpecificOptions = getDbSpecificOptions(currentClass, jf, primaryKey);
        if (dbSpecificOptions != null) schemaFile.write(" " + dbSpecificOptions);
      }
    }

    if (jf instanceof JCompositeField
        && ((JCompositeField) jf).getJClass() != null
        && ((JCompositeField) jf).getJClass().isLeaf()) {

      // is a foreign key and has a class to reference
      JCompositeField jcf = ((JCompositeField) jf);
      JClass foreignClass = jcf.getJClass();
      String cons_name = jcf.getConstraintName();
      if (!Checks.exists(cons_name)) {
        cons_name = currentClass.getClassName() + jf.getJavaName();
        if (cons_name.length() > 30) cons_name = cons_name.substring(cons_name.length() - 28);
      }

      cons_name = makeConstraintName(cons_name);
      writeForeignKey(currentClass, cons_name, jf, foreignClass);

    } else if (Checks.exists(jf.getConstraint())) {
      String cons_name = jf.getConstraintName();
      if (!Checks.exists(cons_name)) cons_name = "C_" + jf.getJavaName();
      cons_name = makeConstraintName(cons_name);
      writeCheckConstraint(currentClass, cons_name, jf);
    }
  }
Пример #28
0
 /** Parameters in fields */
 @Test
 public void parameters_in_fields() throws IOException {
   JClass c = new JClass("test", "MyClass");
   c.addField(new JClass("test.api", "Model").addParameter(String.class), "model");
   assertJClass(c, "/jclass/ParametersInFields.java", "parameters_in_fields");
 }
Пример #29
0
 @Test
 public void referenceName_one_parameter() {
   JClass c = new JClass("test", "MyClass").addParameter(new JClass("test.api", "Model"));
   assertEquals("MyClass<Model>", c.getReferenceName());
 }
Пример #30
0
 @Test
 public void referenceName_no_parameter() {
   JClass c = new JClass("test", "MyClass");
   assertEquals("MyClass", c.getReferenceName());
 }