Example usage for com.google.gwt.core.ext.typeinfo JClassType findConstructor

List of usage examples for com.google.gwt.core.ext.typeinfo JClassType findConstructor

Introduction

In this page you can find the example usage for com.google.gwt.core.ext.typeinfo JClassType findConstructor.

Prototype

JConstructor findConstructor(JType[] paramTypes);

Source Link

Usage

From source file:com.github.ludorival.dao.gwt.rebind.EntityManagerGenerator.java

License:Apache License

private boolean isInstantiable(JClassType type, TreeLogger logger) {
    JConstructor[] constructors = type.getConstructors();
    if (constructors == null || constructors.length == 0)
        return true;
    JConstructor constructor = type.findConstructor(new JType[0]);
    if (constructor == null)
        return false;
    if (constructor.isPublic())
        return true;

    return false;
}

From source file:com.google.gwt.testing.easygwtmock.rebind.MocksControlGenerator.java

License:Apache License

/**
 * Generates the concrete MocksControl implementation of the {@code typeName} interface and 
 * delegates generation of mock classes to
 * {@link com.google.gwt.testing.easygwtmock.rebind.MocksGenerator}
 *//*from www  .ja  v a2s  .  c  o m*/
@Override
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {

    TypeOracle typeOracle = context.getTypeOracle();
    JClassType mockControlInterface = typeOracle.findType(typeName);

    if (mockControlInterface == null) {
        logger.log(TreeLogger.ERROR, "Unable to find metadata for type '" + typeName + "'", null);
        throw new UnableToCompleteException();
    }

    if (mockControlInterface.isInterface() == null) {
        logger.log(TreeLogger.ERROR, mockControlInterface.getQualifiedSourceName() + " is not an interface",
                null);
        throw new UnableToCompleteException();
    }

    JPackage interfacePackage = mockControlInterface.getPackage();
    String packageName = interfacePackage == null ? "" : interfacePackage.getName();
    String newClassName = mockControlInterface.getName().replace(".", "_") + "Impl";
    String fullNewClassName = packageName + "." + newClassName;

    PrintWriter printWriter = context.tryCreate(logger, packageName, newClassName);
    if (printWriter == null) {
        // We generated this before.
        return fullNewClassName;
    }

    ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(packageName, newClassName);
    composer.setSuperclass(MocksControlBase.class.getCanonicalName());
    composer.addImplementedInterface(mockControlInterface.getQualifiedSourceName());

    SourceWriter writer = composer.createSourceWriter(context, printWriter);
    writer.println();

    MocksGenerator mocksGenerator = new MocksGenerator(context, logger);
    JClassType markerInterface = typeOracle.findType(MocksControl.class.getCanonicalName());

    Set<String> reservedNames = getMethodNames(composer.getSuperclassName(), logger, typeOracle);

    // Report one error per method in the control interface. They are likely to be independent,
    // so it's a bit nicer for the user.
    boolean failed = false;
    for (JMethod method : mockControlInterface.getOverridableMethods()) {
        if (method.getEnclosingType().equals(markerInterface)) {
            // Method is implemented in MocksControlBase
            continue;
        }

        if (reservedNames.contains(method.getName())) {
            // Method name is already used in base class and method should not be overwritten!
            logger.log(TreeLogger.ERROR,
                    method.getName()
                            + " is a reserved name. Do not use it in the extended MocksControl interface",
                    null);
            failed = true;
            continue;
        }

        JClassType typeToMock = method.getReturnType().isClassOrInterface();

        if (typeToMock == null) {
            logger.log(TreeLogger.ERROR,
                    method.getReturnType().getQualifiedSourceName() + " is not an interface or a class", null);
            failed = true;
            continue;
        }

        if (typeToMock.isInterface() != null) {

            if (method.getParameterTypes().length != 0) {
                String methodName = mockControlInterface.getSimpleSourceName() + "." + method.getName();
                logger.log(TreeLogger.ERROR,
                        "This method should not have parameters because it creates Ua mock of an interface: "
                                + methodName,
                        null);
                failed = true;
                continue;
            }

        } else {

            JConstructor constructorToCall = typeToMock.findConstructor(method.getParameterTypes());
            if (constructorToCall == null) {
                String methodName = mockControlInterface.getSimpleSourceName() + "." + method.getName();
                logger.log(TreeLogger.ERROR, "Cannot find matching constructor to call for " + methodName,
                        null);
                failed = true;
                continue;
            }
        }

        String mockClassName = mocksGenerator.generateMock(typeToMock);

        printFactoryMethod(writer, method, mockControlInterface, mockClassName);
    }

    if (failed) {
        throw new UnableToCompleteException();
    }

    writer.commit(logger);
    return fullNewClassName;
}

From source file:com.smartgwt.rebind.BeanValueType.java

License:Open Source License

public BeanValueType(JType valueType, TypeOracle oracle) {
    this.valueType = valueType;
    this.oracle = oracle;

    JClassType classType = valueType.isClass();
    if (classType != null) {
        jsObjConstructor = classType
                .findConstructor(new JType[] { findType(com.google.gwt.core.client.JavaScriptObject.class) });

        isAbstract = classType.isAbstract();

        JMethod getRef = classType.findMethod("getOrCreateRef",
                new JType[] { findType(com.google.gwt.core.client.JavaScriptObject.class) });
        hasGetOrCreateRef = getRef != null && getRef.isStatic();
    }//from   w ww .ja  v a2s. co m

    initializeBeanValueType();
    assert beanValueType != null;
    assert genericType != null;

    // If the constructor doesn't take an empty array, then check if it
    // wants a class literal (it's one or the other, or neither).
    if (!constructorTakesEmptyArray) {
        JConstructor noArgConstructor = beanValueType.findConstructor(new JType[] {});
        constructorTakesClassLiteral = noArgConstructor == null;
    }
}

From source file:com.smartgwt.rebind.CanvasMetaBeanFactoryGenerator.java

License:Open Source License

private boolean isEligibleForGeneration(JClassType classType) {
    // Abstract classses will probably be generated as superclasses anyway, but
    // we don't need to generate them from here.
    if (classType.isAbstract())
        return false;

    // Don't try to generate for classes declared private, since it won't work
    if (classType.isPrivate())
        return false;

    // We only generate factories for classes that have a no-arg constructor
    JConstructor constructor = classType.findConstructor(new JType[] {});
    if (constructor == null)
        return false;

    return true;/*w  w w  . j  av a  2s. com*/
}

From source file:fr.onevu.gwt.uibinder.elementparsers.ImageParser.java

License:Apache License

private boolean hasImageResourceConstructor(TypeOracle typeOracle, JClassType type) {
    JType imageResourceType = typeOracle.findType(ImageResource.class.getName());
    return type.findConstructor(new JType[] { imageResourceType }) != null;
}

From source file:fr.onevu.gwt.uibinder.elementparsers.NumberLabelParser.java

License:Apache License

private boolean hasNumberFormatConstructor(TypeOracle typeOracle, JClassType type) {
    JType numberFormatType = typeOracle.findType(NumberFormat.class.getName());
    return type.findConstructor(new JType[] { numberFormatType }) != null;
}

From source file:fr.onevu.gwt.uibinder.rebind.AbstractFieldWriter.java

License:Apache License

public void write(IndentedWriter w) throws UnableToCompleteException {
    if (written) {
        return;/*from   w ww.  ja  va 2  s .  c  o m*/
    }

    for (FieldWriter f : needs) {
        f.write(w);
    }

    if (initializer == null) {
        JClassType type = getInstantiableType();
        if (type != null) {
            if ((type.isInterface() == null) && (type.findConstructor(new JType[0]) == null)) {
                logger.die(NO_DEFAULT_CTOR_ERROR, type.getQualifiedSourceName(), type.getName());
            }
        }
    }

    if (null == initializer) {
        initializer = String.format("(%1$s) GWT.create(%1$s.class)", getQualifiedSourceName());
    }

    w.write("%s %s = %s;", getQualifiedSourceName(), name, initializer);

    this.written = true;
}

From source file:fr.onevu.gwt.uibinder.rebind.AbstractFieldWriter.java

License:Apache License

@Override
public void writeFieldDefinition(IndentedWriter w, TypeOracle typeOracle, OwnerClass ownerClass,
        FieldWriter field, DesignTimeUtils designTime, int getterCount, boolean useLazyWidgetBuilders)
        throws UnableToCompleteException {
    OwnerField ownerField = ownerClass.getUiField(field.getName());

    JClassType renderablePanelType = typeOracle.findType(RenderablePanel.class.getName());
    boolean outputAttachDetachCallbacks = useLazyWidgetBuilders && getAssignableType() != null
            && getAssignableType().isAssignableTo(renderablePanelType);

    // Check initializer. Provided value takes precedence over initializer.
    if (ownerField != null && ownerField.isProvided()) {
        initializer = String.format("owner.%s", name);
    } else if (initializer == null) {
        JClassType type = getInstantiableType();
        if (type != null) {
            if ((type.isInterface() == null) && (type.findConstructor(new JType[0]) == null)) {
                logger.die(NO_DEFAULT_CTOR_ERROR, type.getQualifiedSourceName(), type.getName());
            }//from   www  .  jav  a2  s  .c o  m
        }
        initializer = generateInitilizerForField(typeOracle, ownerClass, field);
    }

    w.newline();
    w.write("/**");
    w.write(" * Getter for %s called %s times. Type: %s. Build precedence: %s.", name, getterCount,
            getFieldType(), getBuildPrecedence());
    w.write(" */");
    if (getterCount > 1) {
        w.write("private %1$s %2$s;", getQualifiedSourceName(), name);
    }

    w.write("private %s %s {", getQualifiedSourceName(), FieldManager.getFieldGetter(name));
    w.indent();
    w.write("return %s;", (getterCount > 1) ? name : FieldManager.getFieldBuilder(name));
    w.outdent();
    w.write("}");

    w.write("private %s %s {", getQualifiedSourceName(), FieldManager.getFieldBuilder(name));
    w.indent();

    w.write("// Creation section.");
    if (getterCount > 1) {
        w.write("%s = %s;", name, initializer);
    } else {
        w.write("final %s %s = %s;", getQualifiedSourceName(), name, initializer);
    }
    if (ownerField != null && ownerField.isProvided() && !designTime.isDesignTime()) {
        w.write("assert %1$s != null : \"UiField %1$s with 'provided = true' was null\";", name);
    }

    w.write("// Setup section.");
    for (String s : statements) {
        w.write(s);
    }

    String attachedVar = null;

    if (attachStatements.size() > 0) {
        w.newline();
        w.write("// Attach section.");
        if (outputAttachDetachCallbacks) {
            // TODO(rdcastro): This is too coupled with RenderablePanel.
            // Make this nicer.
            w.write("%s.wrapInitializationCallback = ", getName());
            w.indent();
            w.indent();
            w.write("new com.google.gwt.user.client.Command() {");
            w.outdent();
            w.write("@Override public void execute() {");
            w.indent();
        } else {
            attachedVar = getNextAttachVar();

            JClassType elementType = typeOracle.findType(Element.class.getName());

            String elementToAttach = getInstantiableType().isAssignableTo(elementType) ? name
                    : name + ".getElement()";

            w.write("UiBinderUtil.TempAttachment %s = UiBinderUtil.attachToDom(%s);", attachedVar,
                    elementToAttach);
        }

        for (String s : attachStatements) {
            w.write(s);
        }

        if (outputAttachDetachCallbacks) {
            w.outdent();
            w.write("}");
            w.outdent();
            w.write("};");
        }
    }

    w.newline();
    // If we forced an attach, we should always detach, regardless of whether
    // there are any detach statements.
    if (attachedVar != null) {
        w.write("// Detach section.");
        w.write("%s.detach();", attachedVar);
    }

    if (detachStatements.size() > 0) {
        if (outputAttachDetachCallbacks) {
            w.write("%s.detachedInitializationCallback = ", getName());
            w.indent();
            w.indent();
            w.write("new com.google.gwt.user.client.Command() {");
            w.outdent();
            w.write("@Override public void execute() {");
            w.indent();
        }

        for (String s : detachStatements) {
            w.write(s);
        }

        if (outputAttachDetachCallbacks) {
            w.outdent();
            w.write("}");
            w.outdent();
            w.write("};");
        }
    }

    if ((ownerField != null) && !ownerField.isProvided()) {
        w.newline();
        w.write("this.owner.%1$s = %1$s;", name);
    }

    w.newline();
    w.write("return %s;", name);
    w.outdent();
    w.write("}");
}

From source file:fr.onevu.gwt.uibinder.rebind.FieldWriterOfExistingType.java

License:Apache License

@Override
public void writeFieldDefinition(IndentedWriter w, TypeOracle typeOracle, OwnerClass ownerClass,
        FieldWriter field, DesignTimeUtils designTime, int getterCount, boolean useLazyWidgetBuilders)
        throws UnableToCompleteException {
    OwnerField ownerField = ownerClass.getUiField(field.getName());

    JClassType renderablePanelType = typeOracle.findType(RenderablePanel.class.getName());
    boolean outputAttachDetachCallbacks = useLazyWidgetBuilders && getAssignableType() != null
            && getAssignableType().isAssignableTo(renderablePanelType);

    // Check initializer. Provided value takes precedence over initializer.
    if (ownerField != null && ownerField.isProvided()) {
        initializer = String.format("owner.%s", name);
    } else if (initializer == null) {
        JClassType type = getInstantiableType();
        if (type != null) {
            if ((type.isInterface() == null) && (type.findConstructor(new JType[0]) == null)) {
                logger.die(NO_DEFAULT_CTOR_ERROR, type.getQualifiedSourceName(), type.getName());
            }//from w w  w. j  a  v  a 2s  . c  o m
        }
        initializer = generateInitilizerForField(typeOracle, ownerClass, field);
    }

    w.newline();
    w.write("/**");
    w.write(" * Getter for %s called %s times. Type: %s. Build precedence: %s.", name, getterCount,
            getFieldType(), getBuildPrecedence());
    w.write(" */");
    if (getterCount > 1) {
        w.write("private %1$s %2$s;", getQualifiedSourceName(), name);
    }

    w.write("private %s %s {", getQualifiedSourceName(), FieldManager.getFieldGetter(name));
    w.indent();
    w.write("return %s;", (getterCount > 1) ? name : FieldManager.getFieldBuilder(name));
    w.outdent();
    w.write("}");

    w.write("private %s %s {", getQualifiedSourceName(), FieldManager.getFieldBuilder(name));
    w.indent();

    w.write("// Creation section.");
    if (getterCount > 1) {
        w.write("%s = %s;", name, initializer);
    } else {
        w.write("final %s %s = %s;", getQualifiedSourceName(), name, initializer);
    }
    if (ownerField != null && ownerField.isProvided() && !designTime.isDesignTime()) {
        w.write("assert %1$s != null : \"UiField %1$s with 'provided = true' was null\";", name);
    }

    addNullCheck(w, field);
    w.write("// Setup section.");
    for (String s : statements) {
        w.write(s);
    }
    w.write(generateAfterStatementsForField(typeOracle, ownerClass, field));
    afterNullCheck(w, field);

    String attachedVar = null;

    if (attachStatements.size() > 0) {
        w.newline();
        w.write("// Attach section.");
        if (outputAttachDetachCallbacks) {
            // TODO(rdcastro): This is too coupled with RenderablePanel.
            // Make this nicer.
            w.write("%s.wrapInitializationCallback = ", getName());
            w.indent();
            w.indent();
            w.write("new com.google.gwt.user.client.Command() {");
            w.outdent();
            w.write("@Override public void execute() {");
            w.indent();
        } else {
            attachedVar = getNextAttachVar();

            JClassType elementType = typeOracle.findType(Element.class.getName());

            String elementToAttach = getInstantiableType().isAssignableTo(elementType) ? name
                    : name + ".getElement()";

            w.write("UiBinderUtil.TempAttachment %s = UiBinderUtil.attachToDom(%s);", attachedVar,
                    elementToAttach);
        }

        for (String s : attachStatements) {
            w.write(s);
        }

        if (outputAttachDetachCallbacks) {
            w.outdent();
            w.write("}");
            w.outdent();
            w.write("};");
        }
    }

    w.newline();
    // If we forced an attach, we should always detach, regardless of whether
    // there are any detach statements.
    if (attachedVar != null) {
        w.write("// Detach section.");
        w.write("%s.detach();", attachedVar);
    }

    if (detachStatements.size() > 0) {
        if (outputAttachDetachCallbacks) {
            w.write("%s.detachedInitializationCallback = ", getName());
            w.indent();
            w.indent();
            w.write("new com.google.gwt.user.client.Command() {");
            w.outdent();
            w.write("@Override public void execute() {");
            w.indent();
        }

        for (String s : detachStatements) {
            w.write(s);
        }

        if (outputAttachDetachCallbacks) {
            w.outdent();
            w.write("}");
            w.outdent();
            w.write("};");
        }
    }

    if ((ownerField != null) && !ownerField.isProvided()) {
        w.newline();
        w.write("this.owner.%1$s = %1$s;", name);
    }

    w.newline();
    w.write("return %s;", name);
    w.outdent();
    w.write("}");
}

From source file:org.cruxframework.crux.core.rebind.rest.JSonSerializerProxyCreator.java

License:Apache License

private void generateDecodeStringForCustomType(SourcePrinter srcWriter, JClassType objectType,
        String jsonValueVar, String resultObjectVar, String resultSourceName) {
    JsonSubTypes jsonSubTypesClass = objectType.getAnnotation(JsonSubTypes.class);
    boolean hasJsonSubTypes = jsonSubTypesClass != null && jsonSubTypesClass.value() != null;
    if (hasJsonSubTypes) {
        boolean first = true;
        for (Type innerObject : jsonSubTypesClass.value()) {
            if (!first) {
                srcWriter.println("else ");
            }/*from w w w  .  j a  v  a  2s. co  m*/
            first = false;
            srcWriter.println("if (" + StringUtils.class.getCanonicalName() + ".unsafeEquals(" + jsonValueVar
                    + ".isObject().get(" + EscapeUtils.quote(JsonSubTypes.SUB_TYPE_SELECTOR)
                    + ").isString().stringValue()," + EscapeUtils.quote(innerObject.value().getName()) + ")){");
            JClassType innerClass = context.getTypeOracle().findType(innerObject.value().getCanonicalName());
            String serializerName = getSerializerForType(innerClass);
            srcWriter
                    .println(resultObjectVar + " = new " + serializerName + "().decode(" + jsonValueVar + ");");
            srcWriter.println("}");
        }
        if (!first) {
            srcWriter.println("else ");
        }
        srcWriter.println("if (" + StringUtils.class.getCanonicalName() + ".unsafeEquals(" + jsonValueVar
                + ".isObject().get(" + EscapeUtils.quote(JsonSubTypes.SUB_TYPE_SELECTOR)
                + ").isString().stringValue()," + EscapeUtils.quote(objectType.getQualifiedSourceName())
                + ")){");
        srcWriter
                .println(resultObjectVar + " = GWT.create(" + objectType.getQualifiedSourceName() + ".class);");
    }

    String jsonObjectVar = nameFactory.createName("jsonObject");
    srcWriter.println("JSONObject " + jsonObjectVar + " = " + jsonValueVar + ".isObject();");
    if (objectType.isAssignableTo(exceptionType)
            && objectType.findConstructor(new JType[] { stringType }) != null) {
        srcWriter.println("if (" + jsonObjectVar + ".containsKey(\"message\")){");
        srcWriter.println(resultObjectVar + " = new " + resultSourceName + "((" + jsonObjectVar
                + ".get(\"message\") != null && " + jsonObjectVar + ".get(\"message\").isString() != null) ? "
                + jsonObjectVar + ".get(\"message\").isString().stringValue() : \"\");");
        srcWriter.println("} else {");
        srcWriter
                .println(resultObjectVar + " = GWT.create(" + objectType.getQualifiedSourceName() + ".class);");
        srcWriter.println("}");
    } else {
        if (!hasJsonSubTypes) {
            srcWriter.println(
                    resultObjectVar + " = GWT.create(" + objectType.getQualifiedSourceName() + ".class);");
        }
    }

    List<JMethod> setterMethods = JClassUtils.getSetterMethods(objectType);
    srcWriter.println("if (" + jsonObjectVar + " != null) {");
    for (JMethod method : setterMethods) {
        if (method.getAnnotation(JsonIgnore.class) == null) {
            String property = null;
            JsonProperty jsonProperty = method.getAnnotation(JsonProperty.class);
            if (jsonProperty != null) {
                property = jsonProperty.value();

            } else {
                property = JClassUtils.getPropertyForGetterOrSetterMethod(method);
            }
            JType paramType = method.getParameterTypes()[0];
            String serializerName = getSerializerForType(paramType);
            srcWriter.println(resultObjectVar + "." + method.getName() + "(new " + serializerName + "().decode("
                    + jsonObjectVar + ".get(" + EscapeUtils.quote(property) + ")));");
        }
    }

    if (hasJsonSubTypes) {
        srcWriter.println("}");
    }
    srcWriter.println("}");
}