List of usage examples for com.google.gwt.core.ext.typeinfo JClassType findConstructor
JConstructor findConstructor(JType[] paramTypes);
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("}"); }