if (methods != null) { for (JMethod m : methods) { gatherTypes(m.getReturnType().getErasedType(), types); if (m.getParameterTypes() != null) { for (JType p : m.getParameterTypes()) {
if (methods != null) { for (JMethod m : methods) { gatherTypes(m.getReturnType().getErasedType(), types); if (m.getParameterTypes() != null) { for (JType p : m.getParameterTypes()) {
if (m.isMethod() != null) { stub.isMethod = true; stub.returnType = getType(m.isMethod().getReturnType()); stub.isStatic = m.isMethod().isStatic(); stub.isAbstract = m.isMethod().isAbstract();
if (m.isMethod() != null) { stub.isMethod = true; stub.returnType = getType(m.isMethod().getReturnType()); stub.isStatic = m.isMethod().isStatic(); stub.isAbstract = m.isMethod().isAbstract();
@Override public JType getReturnType(ResourceContext context, List<String> pathElements) throws NotFoundException { return ResourceGeneratorUtil.getMethodByPath(context.getClientBundleType(), pathElements, null).getReturnType(); } }
@Override public String createAssignment(TreeLogger logger, ResourceContext context, JMethod method) throws UnableToCompleteException { JClassType gwtType = context.getGeneratorContext().getTypeOracle().findType( GWT.class.getName()); assert gwtType != null; return gwtType.getQualifiedSourceName() + ".create(" + method.getReturnType().getQualifiedSourceName() + ".class)"; } }
/** * Add the type dependency requirements for a method, to the context. * * @param context * @param method */ private static void addTypeRequirementsForMethod(ResourceContext context, JMethod method) { ClientBundleRequirements reqs = context.getRequirements(); if (reqs != null) { reqs.addTypeHierarchy(method.getEnclosingType()); reqs.addTypeHierarchy((JClassType) method.getReturnType()); } }
@Override public String createAssignment(TreeLogger logger, ResourceContext context, JMethod method) throws UnableToCompleteException { // if Gss is enabled, defer the call to the Gss generator. if (gssEnabled) { return gssResourceGenerator.createAssignment(logger, context, method); } JClassType cssResourceSubtype = method.getReturnType().isInterface(); assert cssResourceSubtype != null; CssStylesheet stylesheet = stylesheetMap.get(method); // Optimize the stylesheet, recording the class selector obfuscations Map<JMethod, String> actualReplacements = optimize(logger, context, method); outputCssMapArtifact(logger, context, method, actualReplacements); outputAdditionalArtifacts(logger, context, method, actualReplacements, cssResourceSubtype, stylesheet); return getResourceImplAsString(logger, context, method, actualReplacements, cssResourceSubtype, stylesheet); }
private Map<String, Map<String, String>> computeReplacements(JMethod method, TreeLogger logger, ResourceContext context) throws UnableToCompleteException { Map<String, Map<String, String>> replacementsWithPrefix = new HashMap<String, Map<String, String>>(); replacementsWithPrefix .put("", computeReplacementsForType(method.getReturnType().isInterface())); // Process the Import annotation if any Import imp = method.getAnnotation(Import.class); if (imp != null) { boolean fail = false; TypeOracle typeOracle = context.getGeneratorContext().getTypeOracle(); for (Class<? extends CssResource> clazz : imp.value()) { JClassType importType = typeOracle.findType(clazz.getName().replace('$', '.')); assert importType != null : "TypeOracle does not have type " + clazz.getName(); // add this import type as a requirement for this generator context.getRequirements().addTypeHierarchy(importType); String prefix = getImportPrefix(importType); if (replacementsWithPrefix.put(prefix, computeReplacementsForType(importType)) != null) { logger.log(TreeLogger.ERROR, "Multiple imports that would use the prefix " + prefix); fail = true; } } if (fail) { throw new UnableToCompleteException(); } } return replacementsWithPrefix; }
JClassType returnType = method.getReturnType().isClassOrInterface(); assert returnType != null; DefaultExtensions annotation = returnType.findAnnotationInTypeHierarchy(DefaultExtensions.class);
private Map<JMethod, String> writeMethods(TreeLogger logger, ResourceContext context, JMethod method, SourceWriter sw, ConstantDefinitions constantDefinitions, Map<String, String> originalConstantNameMapping, Map<String, String> substitutionMap) throws UnableToCompleteException { JClassType gssResource = method.getReturnType().isInterface(); boolean success = true; Map<JMethod, String> methodToClassName = new LinkedHashMap<>(); for (JMethod toImplement : gssResource.getOverridableMethods()) { if (toImplement == getTextMethod) { writeGetText(logger, context, method, sw); } else if (toImplement == ensuredInjectedMethod) { writeEnsureInjected(sw); } else if (toImplement == getNameMethod) { writeGetName(method, sw); } else { success &= writeUserMethod(logger, toImplement, sw, constantDefinitions, originalConstantNameMapping, substitutionMap, methodToClassName); } } if (!success) { throw new UnableToCompleteException(); } return methodToClassName; }
isReturnTypeString(userMethod.getReturnType().isClass())) { methodToClassName.put(userMethod, substitutionMap.get(className)); return writeClassMethod(logger, userMethod, substitutionMap, sw);
&& toImplement.getParameters().length == 0) { writeDefAssignment(logger, sw, toImplement, sheet); } else if (toImplement.getReturnType().getQualifiedSourceName() .equals("java.lang.String") && toImplement.getParameters().length == 0) {
@Override public String createAssignment(TreeLogger logger, ResourceContext context, JMethod method) throws UnableToCompleteException { JParameterizedType returnType = method.getReturnType().isParameterized(); assert returnType != null; JClassType args[] = returnType.getTypeArgs(); assert args.length == 1; ClassType override = method.getAnnotation(ClassType.class); JClassType toCreate; if (override != null) { toCreate = context.getGeneratorContext().getTypeOracle().findType( override.value().getName().replace('$', '.')); assert toCreate != null; } else { toCreate = args[0]; } JClassType gwtType = context.getGeneratorContext().getTypeOracle().findType( GWT.class.getName()); assert gwtType != null; return "new " + returnType.getParameterizedQualifiedSourceName() + "() {\n public " + toCreate.getQualifiedSourceName() + " create() {\n return " + gwtType.getQualifiedSourceName() + ".create(" + toCreate.getQualifiedSourceName() + ".class);}\n" + "public String getName() { return \"" + method.getName() + "\";}}"; } }
protected String getResourceImplAsString(TreeLogger logger, ResourceContext context, JMethod method, Map<JMethod, String> actualReplacements, JClassType cssResourceSubtype, CssStylesheet stylesheet) throws UnableToCompleteException { SourceWriter sw = new StringSourceWriter(); // Write the expression to create the subtype. sw.println("new " + method.getReturnType().getQualifiedSourceName() + "() {"); sw.indent(); // Methods defined by CssResource interface writeEnsureInjected(sw); writeGetName(method, sw); // Create the Java expression that generates the CSS writeGetText(logger, context, method, sw); // getOverridableMethods is used to handle CssResources extending // non-CssResource types. See the discussion in computeReplacementsForType. writeUserMethods(logger, sw, stylesheet, cssResourceSubtype.getOverridableMethods(), actualReplacements); sw.outdent(); sw.println("}"); return sw.toString(); }
@Override public String createAssignment(TreeLogger logger, ResourceContext context, JMethod method) throws UnableToCompleteException { CssParsingResult cssParsingResult = cssParsingResultMap.get(method); CssTree cssTree = cssParsingResult.tree; RenamingResult renamingResult = doClassRenaming(cssTree, method, logger, context); // TODO : Should we foresee configuration properties for simplifyCss and eliminateDeadCode // booleans ? ConstantDefinitions constantDefinitions = optimizeTree(cssParsingResult, context, true, true, logger); checkErrors(); Set<String> externalClasses = revertRenamingOfExternalClasses(cssTree, renamingResult); checkErrors(); // Validate that classes not assigned to one of the interface methods are external validateExternalClasses(externalClasses, renamingResult.externalClassCandidate, method, logger); SourceWriter sw = new StringSourceWriter(); sw.println("new " + method.getReturnType().getQualifiedSourceName() + "() {"); sw.indent(); Map<JMethod, String> actualReplacements = writeMethods(logger, context, method, sw, constantDefinitions, cssParsingResult.originalConstantNameMapping, renamingResult.mapping); sw.outdent(); sw.println("}"); CssResourceGenerator.outputCssMapArtifact(logger, context, method, actualReplacements); return sw.toString(); }
JClassType classReturnType = toImplement.getReturnType().isClass(); JPrimitiveType returnType = toImplement.getReturnType().isPrimitive(); if (returnType == null) { logger.log(TreeLogger.ERROR, toImplement.getName()
@Override public void prepare(TreeLogger logger, ResourceContext context, ClientBundleRequirements requirements, JMethod method) throws UnableToCompleteException { if (method.getReturnType().isInterface() == null) { logger.log(TreeLogger.ERROR, "Return type must be an interface"); throw new UnableToCompleteException(); } URL[] resourceUrls = findResources(logger, context, method, gssOptions.isEnabled()); if (resourceUrls.length == 0) { logger.log(TreeLogger.ERROR, "At least one source must be specified"); throw new UnableToCompleteException(); } CssParsingResult cssParsingResult = parseResources(Lists.newArrayList(resourceUrls), context, logger); cssParsingResultMap.put(method, cssParsingResult); for (String permutationAxis : cssParsingResult.permutationAxes) { try { context.getRequirements().addPermutationAxis(permutationAxis); } catch (BadPropertyValueException e) { logger.log(TreeLogger.ERROR, "Unknown deferred-binding property " + permutationAxis, e); throw new UnableToCompleteException(); } } }
@Override public void prepare(TreeLogger logger, ResourceContext context, ClientBundleRequirements requirements, JMethod method) throws UnableToCompleteException { // if Gss is enabled, defer the call to the Gss generator. if (gssEnabled) { gssResourceGenerator.prepare(logger, context, requirements, method); return; } if (method.getReturnType().isInterface() == null) { logger.log(TreeLogger.ERROR, "Return type must be an interface"); throw new UnableToCompleteException(); } URL[] resources = getResources(logger, context, method); if (resources.length == 0) { logger.log(TreeLogger.ERROR, "At least one source must be specified"); throw new UnableToCompleteException(); } // At this point, gss is not enabled so we shouldn't try to compile a gss file. ensureNoGssFile(resources, logger); // Create the AST and do a quick scan for requirements CssStylesheet sheet = GenerateCssAst.exec(logger, resources); checkSheet(logger, sheet); stylesheetMap.put(method, sheet); (new RequirementsCollector(logger, context.getRequirements())).accept(sheet); }
JClassType cssResourceSubtype = method.getReturnType().isInterface(); assert cssResourceSubtype != null; assert derivedFromCssResource(cssResourceSubtype,