String selector = arguments.next(); if (!selector.startsWith("--")) { logger.error( null /* throwable */, "Invalid parameter " + selector + ", expected a command switch"); return 1; logger.error( null /* throwable */, "Command switch " + selector + " has no value associated"); return 1; String value = arguments.next(); if (Strings.isNullOrEmpty(value)) { logger.error(null /* throwable */, "Empty value for switch " + selector); return 1; logger.error( null /* throwable */, "Invalid property setting, should be NAME=VALUE format"); return 1; invoker.setOverride(manifestSystemProperty, value.substring(value.indexOf('=') + 1)); } catch (IllegalArgumentException e) { logger.error( e, "Invalid property name " logger.error( null /* throwable */, "Invalid placeholder setting, should be NAME=VALUE format"); return 1;
@Override public void receiveMessage( Message message ) { logger.info( message .toString() ); // TBD anything else to do? }
@Override @Nullable public ClassReader loadClassBytes(@NonNull String className, @NonNull ILogger logger) { File outerClassFile = new File(binaryFolder, className + ".class"); if (outerClassFile.exists()) { logger.verbose("Parsing %s", outerClassFile); try(InputStream outerClassInputStream = new BufferedInputStream(new FileInputStream(outerClassFile))) { return new ClassReader(outerClassInputStream); } catch (IOException e) { logger.error(e, "Cannot parse %s", className); } } return null; } }
@Override public void testRunFailed(String errorMessage) { if (mLogger != null) { mLogger.warning("Tests on %1$s failed: %2$s", mDeviceName, errorMessage); } super.testRunFailed(errorMessage); }
@Override public void shutdown() { if (!mAaptProcesses.isEmpty()) { mLogger.warning("Process list not empty"); for (Map.Entry<String, AaptProcess> aaptProcessEntry : mAaptProcesses .entrySet()) { mLogger.warning("Thread(%1$s): queue not cleaned", aaptProcessEntry.getKey()); try { aaptProcessEntry.getValue().shutdown(); } catch (Exception e) { mLogger.error(e, "while shutting down" + aaptProcessEntry.getKey()); } } } mAaptProcesses.clear(); } };
private void verbose(String format, Object...args) { if (VERBOSE) { mLogger.verbose(format, args); } } }
/** * dumps all logging records to a logger. */ public void log(@NonNull ILogger logger) { for (Record record : mRecords) { switch(record.mSeverity) { case WARNING: logger.warning(record.toString()); break; case ERROR: logger.error(null /* throwable */, record.toString()); break; case INFO: logger.verbose(record.toString()); break; default: logger.error(null /* throwable */, "Unhandled record type " + record.mSeverity); } } mActions.log(logger); if (!mResult.isSuccess()) { logger.warning("\nSee http://g.co/androidstudio/manifest-merger for more information" + " about the manifest merger.\n"); } }
private void handleMergingResult(@NonNull MergingReport mergingReport, @NonNull File outFile) { switch (mergingReport.getResult()) { case WARNING: mergingReport.log(mLogger); // fall through since these are just warnings. case SUCCESS: XmlDocument xmlDocument = mergingReport.getMergedDocument().get(); try { String annotatedDocument = mergingReport.getActions().blame(xmlDocument); mLogger.verbose(annotatedDocument); } catch (Exception e) { mLogger.error(e, "cannot print resulting xml"); } save(xmlDocument, outFile); mLogger.info("Merged manifest saved to " + outFile); break; case ERROR: mergingReport.log(mLogger); throw new RuntimeException(mergingReport.getReportString()); default: throw new RuntimeException("Unhandled result type : " + mergingReport.getResult()); } }
/** * Return the first service instance for the requested service type or * {@link Optional#absent()} if none exist. * @param logger to log resolution. * @param serviceType the requested service type encapsulation. * @param <T> the requested service class type. * @return the instance of T or null of none exist in this context. * @throws ClassNotFoundException */ @NonNull public synchronized <T> Optional<T> getSingleService( ILogger logger, Service<T> serviceType) throws ClassNotFoundException { logger.verbose("Looking for %1$s", serviceType); ServiceLoader<T> serviceLoader = getServiceLoader(serviceType); logger.verbose("Got a serviceLoader %1$d", Integer.toHexString(System.identityHashCode(serviceLoader))); Iterator<T> serviceIterator = serviceLoader.iterator(); logger.verbose("Service Iterator = %1$s ", serviceIterator); if (serviceIterator.hasNext()) { T service = serviceIterator.next(); logger.verbose("Got it from %1$s, loaded service = %2$s, type = %3$s", serviceIterator, service, service.getClass()); return Optional.of(service); } else { logger.info("Cannot find service implementation %1$s" + serviceType); return Optional.absent(); } }
@Override public void creation(@NonNull Thread t) throws IOException { try { AaptProcess aaptProcess = new AaptProcess.Builder(mAaptLocation, mLogger).start(); assert aaptProcess != null; mLogger.verbose("Thread(%1$s): created aapt slave, Process(%2$s)", Thread.currentThread().getName(), aaptProcess.hashCode()); aaptProcess.waitForReady(); mAaptProcesses.put(t.getName(), aaptProcess); } catch (InterruptedException e) { mLogger.error(e, "Cannot start slave process"); e.printStackTrace(); } }
@Override public void testRunFailed(String errorMessage) { if (mLogger != null) { mLogger.warning("Tests on %1$s failed: %2$s", mDeviceName, errorMessage); } super.testRunFailed(errorMessage); }
@Override public void shutdown() { if (!mAaptProcesses.isEmpty()) { mLogger.warning("Process list not empty"); for (Map.Entry<String, AaptProcess> aaptProcessEntry : mAaptProcesses .entrySet()) { mLogger.warning("Thread(%1$s): queue not cleaned", aaptProcessEntry.getKey()); try { aaptProcessEntry.getValue().shutdown(); } catch (Exception e) { mLogger.error(e, "while shutting down" + aaptProcessEntry.getKey()); } } } mAaptProcesses.clear(); } };
private void verbose(String format, Object...args) { if (VERBOSE) { mLogger.verbose(format, args); } } }
@Override public int getDensity() { String densityValue = getNullableProperty(IDevice.PROP_DEVICE_DENSITY); if (densityValue == null) { densityValue = getNullableProperty(IDevice.PROP_DEVICE_EMULATOR_DENSITY); } if (densityValue == null) { mLogger.verbose("Unable to get density for device %1$s", getName()); return -1; } try { return Integer.parseInt(densityValue); } catch (NumberFormatException e) { mLogger.info("Unable to get density for device %1$s. " + "Density value %2$s could not be parsed.", getName(), densityValue); return -1; } }