Java源码示例:com.android.utils.ILogger
示例1
@Override
public boolean parse(@NonNull String line,
@NonNull OutputLineReader reader,
@NonNull List<Message> messages,
@NonNull ILogger logger) throws ParsingFailedException {
Matcher m = MSG_PATTERN.matcher(line);
if (!m.matches()) {
return false;
}
String json = m.group(1);
if (json.trim().isEmpty()) {
return false;
}
GsonBuilder gsonBuilder = new GsonBuilder();
MessageJsonSerializer.registerTypeAdapters(gsonBuilder);
Gson gson = gsonBuilder.create();
try {
Message msg = gson.fromJson(json, Message.class);
messages.add(msg);
return true;
} catch (JsonParseException e) {
throw new ParsingFailedException(e);
}
}
示例2
public ArgvParser(ILogger logger) {
super(logger, ACTIONS);
// The following defines the parameters of the actions defined in mAction.
// --- merge manifest ---
define(Mode.STRING, true,
VERB_MERGE, NO_VERB_OBJECT, "o", KEY_OUT, //$NON-NLS-1$
"Output path (where to write the merged manifest). Use - for stdout.", null);
define(Mode.STRING, true,
VERB_MERGE, NO_VERB_OBJECT, "1", KEY_MAIN, //$NON-NLS-1$
"Path of the main manifest (what to merge *into*)", null);
define(Mode.STRING_ARRAY, true,
VERB_MERGE, NO_VERB_OBJECT, "2", KEY_LIBS, //$NON-NLS-1$
"Paths of library manifests to be merged into the main one.",
null);
}
示例3
public AvdInfo updateAvd(AvdInfo avd,
Map<String, String> newProperties,
AvdStatus status,
ILogger log) throws IOException {
// now write the config file
File configIniFile = new File(avd.getDataFolderPath(), CONFIG_INI);
writeIniFile(configIniFile, newProperties, true);
// finally create a new AvdInfo for this unbroken avd and add it to the list.
// instead of creating the AvdInfo object directly we reparse it, to detect other possible
// errors
// FIXME: We may want to create this AvdInfo by reparsing the AVD instead. This could detect other errors.
AvdInfo newAvd = new AvdInfo(
avd.getName(),
avd.getIniFile(),
avd.getDataFolderPath(),
avd.getTargetHash(),
avd.getTarget(),
avd.getTag(),
avd.getAbiType(),
newProperties);
replaceAvd(avd, newAvd);
return newAvd;
}
示例4
private ManifestMerger2(
@NonNull ILogger logger,
@NonNull File mainManifestFile,
@NonNull ImmutableList<Pair<String, File>> libraryFiles,
@NonNull ImmutableList<File> flavorsAndBuildTypeFiles,
@NonNull ImmutableList<Invoker.Feature> optionalFeatures,
@NonNull Map<String, Object> placeHolderValues,
@NonNull KeyBasedValueResolver<SystemProperty> systemPropertiesResolver,
@NonNull MergeType mergeType,
@NonNull Optional<File> reportFile) {
this.mSystemPropertyResolver = systemPropertiesResolver;
this.mPlaceHolderValues = placeHolderValues;
this.mManifestFile = mainManifestFile;
this.mLogger = logger;
this.mLibraryFiles = libraryFiles;
this.mFlavorsAndBuildTypeFiles = flavorsAndBuildTypeFiles;
this.mOptionalFeatures = optionalFeatures;
this.mMergeType = mergeType;
this.mReportFile = reportFile;
}
示例5
/**
* Constructs a new command-line processor.
*
* @param logger An SDK logger object. Must not be null.
* @param actions The list of actions recognized on the command-line.
* See the javadoc of {@link #mActions} for more details.
*
* @see #mActions
*/
public CommandLineParser(ILogger logger, String[][] actions) {
mLog = logger;
mActions = actions;
/*
* usage should fit in 80 columns, including the space to print the options:
* " -v --verbose 7890123456789012345678901234567890123456789012345678901234567890"
*/
define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "v", KEY_VERBOSE,
"Verbose mode, shows errors, warnings and all messages.",
false);
define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "s", KEY_SILENT,
"Silent mode, shows errors only.",
false);
define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "h", KEY_HELP,
"Help on a specific command.",
false);
}
示例6
@Override
public boolean parse(@NonNull String line, @NonNull OutputLineReader reader, @NonNull List<Message> messages, @NonNull ILogger logger)
throws ParsingFailedException {
for (Pattern pattern : MSG_PATTERNS) {
Matcher m = pattern.matcher(line);
if (m.matches()) {
String sourcePath = m.group(1);
String lineNumber = m.group(2);
String msgText = m.group(3);
Message.Kind kind = Message.Kind.ERROR;
if (msgText.startsWith("warning: ")) {
// NDK warning also matches this regexp
kind = Message.Kind.WARNING;
}
if (sourcePath.endsWith(SdkConstants.DOT_JAVA)) {
return false;
}
Message msg = createMessage(kind, msgText, sourcePath, lineNumber, "", logger);
messages.add(msg);
return true;
}
}
return false;
}
示例7
/**
* Checks whether the build-tool is valid by verifying that the expected binaries
* are actually present. This checks that all known paths point to a valid file
* or directory.
*
* @param log An optional logger. If non-null, errors will be printed there.
* @return True if the build-tool folder contains all the expected tools.
*/
public boolean isValid(@Nullable ILogger log) {
for (Map.Entry<PathId, String> entry : mPaths.entrySet()) {
File f = new File(entry.getValue());
// check if file is missing. It's only ok if the revision of the build-tools
// is lower than the min rev of the element.
if (!f.exists() && entry.getKey().isPresentIn(mRevision)) {
if (log != null) {
log.warning("Build-tool %1$s is missing %2$s at %3$s", //$NON-NLS-1$
mRevision.toString(),
entry.getKey(), f.getAbsolutePath());
}
return false;
}
}
return true;
}
示例8
@Override
protected void readSourceFolder(File sourceFolder, ILogger logger)
throws MergingException {
List<Message> errors = Lists.newArrayList();
File[] folders = sourceFolder.listFiles();
if (folders != null) {
for (File folder : folders) {
if (folder.isDirectory() && !isIgnored(folder)) {
FolderData folderData = getFolderData(folder);
if (folderData != null) {
try {
parseFolder(sourceFolder, folder, folderData, logger);
} catch (MergingException e) {
errors.addAll(e.getMessages());
}
}
}
}
}
MergingException.throwIfNonEmpty(errors);
}
示例9
/**
* Reads the content of a typed resource folder (sub folder to the root of res folder), and
* loads the resources from it.
*
*
* @param sourceFolder the main res folder
* @param folder the folder to read.
* @param folderData the folder Data
* @param logger a logger object
*
* @throws MergingException if something goes wrong
*/
private void parseFolder(File sourceFolder, File folder, FolderData folderData, ILogger logger)
throws MergingException {
File[] files = folder.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
if (!file.isFile() || isIgnored(file)) {
continue;
}
ResourceFile resourceFile = createResourceFile(file, folderData, logger);
if (resourceFile != null) {
processNewDataFile(sourceFolder, resourceFile, true /*setTouched*/);
}
}
}
}
示例10
/**
* Update the DataSet with a given file.
*
* @param sourceFolder the sourceFile containing the changedFile
* @param changedFile The changed file
* @param fileStatus the change state
* @return true if the set was properly updated, false otherwise
* @throws MergingException if something goes wrong
*/
public boolean updateWith(File sourceFolder, File changedFile, FileStatus fileStatus,
ILogger logger)
throws MergingException {
switch (fileStatus) {
case NEW:
return handleNewFile(sourceFolder, changedFile, logger);
case CHANGED:
return handleChangedFile(sourceFolder, changedFile);
case REMOVED:
F dataFile = mDataFileMap.get(changedFile);
if (dataFile == null) {
return false;
}
// flag all resource items are removed
for (I dataItem : dataFile.getItems()) {
dataItem.setRemoved();
}
return true;
}
return false;
}
示例11
private ManifestMerger2(
@NonNull ILogger logger,
@NonNull File mainManifestFile,
@NonNull ImmutableList<Pair<String, File>> libraryFiles,
@NonNull ImmutableList<File> flavorsAndBuildTypeFiles,
@NonNull ImmutableList<Invoker.Feature> optionalFeatures,
@NonNull Map<String, Object> placeHolderValues,
@NonNull KeyBasedValueResolver<SystemProperty> systemPropertiesResolver,
@NonNull MergeType mergeType,
@NonNull Optional<File> reportFile) {
this.mSystemPropertyResolver = systemPropertiesResolver;
this.mPlaceHolderValues = placeHolderValues;
this.mManifestFile = mainManifestFile;
this.mLogger = logger;
this.mLibraryFiles = libraryFiles;
this.mFlavorsAndBuildTypeFiles = flavorsAndBuildTypeFiles;
this.mOptionalFeatures = optionalFeatures;
this.mMergeType = mergeType;
this.mReportFile = reportFile;
}
示例12
@Override
public boolean parse(@NonNull String line, @NonNull OutputLineReader reader, @NonNull List<Message> messages, @NonNull ILogger logger)
throws ParsingFailedException {
Matcher m = MSG_PATTERN.matcher(line);
if (!m.matches()) {
return false;
}
String sourcePath = m.group(1);
String lineNumber = m.group(2);
String msgText = m.group(3);
Message msg = createMessage(Message.Kind.ERROR, msgText, sourcePath,
lineNumber, "", logger);
messages.add(msg);
return true;
}
示例13
public ArgvParser(ILogger logger) {
super(logger, ACTIONS);
// The following defines the parameters of the actions defined in mAction.
// --- merge manifest ---
define(Mode.STRING, true,
VERB_MERGE, NO_VERB_OBJECT, "o", KEY_OUT, //$NON-NLS-1$
"Output path (where to write the merged manifest). Use - for stdout.", null);
define(Mode.STRING, true,
VERB_MERGE, NO_VERB_OBJECT, "1", KEY_MAIN, //$NON-NLS-1$
"Path of the main manifest (what to merge *into*)", null);
define(Mode.STRING_ARRAY, true,
VERB_MERGE, NO_VERB_OBJECT, "2", KEY_LIBS, //$NON-NLS-1$
"Paths of library manifests to be merged into the main one.",
null);
}
示例14
@Override
public boolean parse(@NonNull String line, @NonNull OutputLineReader reader, @NonNull List<Message> messages, @NonNull ILogger logger)
throws ParsingFailedException {
Matcher m = MSG_PATTERN.matcher(line);
if (!m.matches()) {
return false;
}
String sourcePath = m.group(2);
// Certain files can safely be skipped without marking the project as having errors.
// See isHidden() in AaptAssets.cpp:
String type = m.group(1);
if (type.equals("backup") // main.xml~, etc
|| type.equals("hidden") // .gitignore, etc
|| type.equals("index")) { // thumbs.db, etc
return true;
}
Message msg = createMessage(Message.Kind.WARNING, line, sourcePath,
null, "", logger);
messages.add(msg);
return true;
}
示例15
@VisibleForTesting
static boolean isClassTargetingNewerPlatform(
int targetApiLevel,
@NonNull Type targetApiAnnotationType,
@NonNull AsmUtils.ClassReaderProvider locator,
@NonNull ClassNode classNode,
@NonNull ILogger logger) throws IOException {
List<AnnotationNode> invisibleAnnotations =
AsmUtils.getInvisibleAnnotationsOnClassOrOuterClasses(locator, classNode, logger);
for (AnnotationNode classAnnotation : invisibleAnnotations) {
if (classAnnotation.desc.equals(targetApiAnnotationType.getDescriptor())) {
int valueIndex = 0;
List values = classAnnotation.values;
while (valueIndex < values.size()) {
String name = (String) values.get(valueIndex);
if (name.equals("value")) {
Object value = values.get(valueIndex + 1);
return Integer.class.cast(value) > targetApiLevel;
}
valueIndex = valueIndex + 2;
}
}
}
return false;
}
示例16
/**
* Constructs a new command-line processor.
*
* @param logger An SDK logger object. Must not be null.
* @param actions The list of actions recognized on the command-line.
* See the javadoc of {@link #mActions} for more details.
*
* @see #mActions
*/
public CommandLineParser(ILogger logger, String[][] actions) {
mLog = logger;
mActions = actions;
/*
* usage should fit in 80 columns, including the space to print the options:
* " -v --verbose 7890123456789012345678901234567890123456789012345678901234567890"
*/
define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "v", KEY_VERBOSE,
"Verbose mode, shows errors, warnings and all messages.",
false);
define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "s", KEY_SILENT,
"Silent mode, shows errors only.",
false);
define(Mode.BOOLEAN, false, GLOBAL_FLAG_VERB, NO_VERB_OBJECT, "h", KEY_HELP,
"Help on a specific command.",
false);
}
示例17
/**
* Update the DataSet with a given file.
*
* @param sourceFolder the sourceFile containing the changedFile
* @param changedFile The changed file
* @param fileStatus the change state
* @return true if the set was properly updated, false otherwise
* @throws MergingException if something goes wrong
*/
public boolean updateWith(File sourceFolder, File changedFile, FileStatus fileStatus,
ILogger logger)
throws MergingException {
switch (fileStatus) {
case NEW:
return handleNewFile(sourceFolder, changedFile, logger);
case CHANGED:
return handleChangedFile(sourceFolder, changedFile, logger);
case REMOVED:
return handleRemovedFile(changedFile);
}
return false;
}
示例18
/**
* Try to find a platform-tools package at the given location.
* Returns null if not found.
*/
private Package scanPlatformTools(File platformToolsFolder, ILogger log) {
// Can we find some properties?
Properties props = parseProperties(new File(platformToolsFolder,
SdkConstants.FN_SOURCE_PROP));
// We're not going to check that all tools are present. At the very least
// we should expect to find adb, aidl, aapt and dx (adapted to the current OS).
if (platformToolsFolder.listFiles() == null) {
// ListFiles is null if the directory doesn't even exist.
// Not going to find anything in there...
return null;
}
// Create our package. use the properties if we found any.
try {
Package pkg = PlatformToolPackage.create(
null, //source
props, //properties
0, //revision
null, //license
"Platform Tools", //description
null, //descUrl
platformToolsFolder.getPath() //archiveOsPath
);
return pkg;
} catch (Exception e) {
log.error(e, null);
}
return null;
}
示例19
private void readFiles(@NonNull File sourceFolder, @NonNull File folder, @NonNull ILogger logger)
throws MergingException {
File[] files = folder.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
if (!isIgnored(file)) {
if (file.isFile()) {
handleNewFile(sourceFolder, file, logger);
} else if (file.isDirectory()) {
readFiles(sourceFolder, file, logger);
}
}
}
}
}
示例20
/**
* Find any directory in the /extras/vendors/path folders for extra packages.
* This isn't a recursive search.
*/
private void scanExtras(SdkManager sdkManager,
HashSet<File> visited,
ArrayList<Package> packages,
ILogger log) {
File root = new File(sdkManager.getLocation(), SdkConstants.FD_EXTRAS);
for (File vendor : listFilesNonNull(root)) {
if (vendor.isDirectory()) {
scanExtrasDirectory(vendor.getAbsolutePath(), visited, packages, log);
}
}
}
示例21
/**
* Find any other directory in the given "root" directory that hasn't been visited yet
* and assume they contain extra packages. This is <em>not</em> a recursive search.
*/
private void scanExtrasDirectory(String extrasRoot,
HashSet<File> visited,
ArrayList<Package> packages,
ILogger log) {
File root = new File(extrasRoot);
for (File dir : listFilesNonNull(root)) {
if (dir.isDirectory() && !visited.contains(dir)) {
Properties props = parseProperties(new File(dir, SdkConstants.FN_SOURCE_PROP));
if (props != null) {
try {
Package pkg = ExtraPackage.create(
null, //source
props, //properties
null, //vendor
dir.getName(), //path
0, //revision
null, //license
null, //description
null, //descUrl
dir.getPath() //archiveOsPath
);
packages.add(pkg);
visited.add(dir);
} catch (Exception e) {
log.error(e, null);
}
}
}
}
}
示例22
@Override
public boolean parse(@NonNull String line, @NonNull OutputLineReader reader, @NonNull List<Message> messages, @NonNull ILogger logger)
throws ParsingFailedException {
Matcher m = MSG_PATTERN.matcher(line);
if (!m.matches()) {
return false;
}
String sourcePath = m.group(2);
String text = m.group(1);
Message msg = createMessage(Message.Kind.ERROR, text, sourcePath, null, "", logger);
messages.add(msg);
return true;
}
示例23
/**
* Scan the sources/folders and register valid as well as broken source packages.
*/
private void scanSources(SdkManager sdkManager,
HashSet<File> visited,
ArrayList<Package> packages,
ILogger log) {
File srcRoot = new File(sdkManager.getLocation(), SdkConstants.FD_PKG_SOURCES);
// The sources folder contains a list of platform folders.
for (File platformDir : listFilesNonNull(srcRoot)) {
if (platformDir.isDirectory() && !visited.contains(platformDir)) {
visited.add(platformDir);
// Ignore empty directories
File[] srcFiles = platformDir.listFiles();
if (srcFiles != null && srcFiles.length > 0) {
Properties props =
parseProperties(new File(platformDir, SdkConstants.FN_SOURCE_PROP));
try {
Package pkg = SourcePackage.create(platformDir, props);
packages.add(pkg);
} catch (Exception e) {
log.error(e, null);
}
}
}
}
}
示例24
/**
* Try to find a docs package at the given location.
* Returns null if not found.
*/
private Package scanDoc(File docFolder, ILogger log) {
// Can we find some properties?
Properties props = parseProperties(new File(docFolder, SdkConstants.FN_SOURCE_PROP));
// To start with, a doc folder should have an "index.html" to be acceptable.
// We don't actually check the content of the file.
if (new File(docFolder, "index.html").isFile()) {
try {
Package pkg = DocPackage.create(
null, //source
props, //properties
0, //apiLevel
null, //codename
0, //revision
null, //license
null, //description
null, //descUrl
docFolder.getPath() //archiveOsPath
);
return pkg;
} catch (Exception e) {
log.error(e, null);
}
}
return null;
}
示例25
/**
* The sdk manager only lists valid addons. However here we also want to find "broken"
* addons, i.e. addons that failed to load for some reason.
* <p/>
* Find any other sub-directories under the /add-ons root that hasn't been visited yet
* and assume they contain broken addons.
*/
private void scanMissingAddons(SdkManager sdkManager,
HashSet<File> visited,
ArrayList<Package> packages,
ILogger log) {
File addons = new File(new File(sdkManager.getLocation()), SdkConstants.FD_ADDONS);
for (File dir : listFilesNonNull(addons)) {
if (dir.isDirectory() && !visited.contains(dir)) {
Pair<Map<String, String>, String> infos =
parseAddonProperties(dir, sdkManager.getTargets(), log);
Properties sourceProps =
parseProperties(new File(dir, SdkConstants.FN_SOURCE_PROP));
Map<String, String> addonProps = infos.getFirst();
String error = infos.getSecond();
try {
Package pkg = AddonPackage.createBroken(dir.getAbsolutePath(),
sourceProps,
addonProps,
error);
packages.add(pkg);
visited.add(dir);
} catch (Exception e) {
log.error(e, null);
}
}
}
}
示例26
/**
* Try to find a docs package at the given location.
* Returns null if not found.
*/
private Package scanDoc(File docFolder, ILogger log) {
// Can we find some properties?
Properties props = parseProperties(new File(docFolder, SdkConstants.FN_SOURCE_PROP));
// To start with, a doc folder should have an "index.html" to be acceptable.
// We don't actually check the content of the file.
if (new File(docFolder, "index.html").isFile()) {
try {
Package pkg = DocPackage.create(
null, //source
props, //properties
0, //apiLevel
null, //codename
0, //revision
null, //license
null, //description
null, //descUrl
docFolder.getPath() //archiveOsPath
);
return pkg;
} catch (Exception e) {
log.error(e, null);
}
}
return null;
}
示例27
/**
* Returns the path to the skin, as a relative path to the SDK.
* @param skinName The name of the skin to find. Case-sensitive.
* @param target The target where to find the skin.
* @param log the log object to receive action logs. Cannot be null.
*/
@Deprecated
private String getSkinRelativePath(@NonNull String skinName,
@NonNull IAndroidTarget target,
@NonNull ILogger log) {
if (log == null) {
throw new IllegalArgumentException("log cannot be null");
}
// first look to see if the skin is in the target
File skin = getSkinFolder(skinName, target);
// skin really does not exist!
if (skin.exists() == false) {
log.error(null, "Skin '%1$s' does not exist.", skinName);
return null;
}
// get the skin path
String path = skin.getAbsolutePath();
// make this path relative to the SDK location
String sdkLocation = myLocalSdk.getPath();
if (path.startsWith(sdkLocation) == false) {
// this really really should not happen.
log.error(null, "Target location is not inside the SDK.");
assert false;
return null;
}
path = path.substring(sdkLocation.length());
if (path.charAt(0) == File.separatorChar) {
path = path.substring(1);
}
return path;
}
示例28
protected boolean handleChangedFile(
@NonNull File sourceFolder,
@NonNull File changedFile,
@NonNull ILogger logger) throws MergingException {
F dataFile = mDataFileMap.get(changedFile);
for (I item : dataFile.getItems()) {
item.setTouched();
}
return true;
}
示例29
/**
* Updates an AVD with new path to the system image folders.
* @param avd the AVD to update.
* @param log the log object to receive action logs. Cannot be null.
* @throws IOException
*/
public AvdInfo updateAvd(AvdInfo avd, ILogger log) throws IOException {
// get the properties. This is a unmodifiable Map.
Map<String, String> oldProperties = avd.getProperties();
// create a new map
Map<String, String> properties = new HashMap<String, String>();
if (oldProperties != null) {
properties.putAll(oldProperties);
}
AvdStatus status;
// create the path to the new system images.
if (setImagePathProperties(avd.getTarget(),
avd.getTag(),
avd.getAbiType(),
properties,
log)) {
if (properties.containsKey(AVD_INI_IMAGES_1)) {
log.info("Updated '%1$s' with value '%2$s'\n", AVD_INI_IMAGES_1,
properties.get(AVD_INI_IMAGES_1));
}
if (properties.containsKey(AVD_INI_IMAGES_2)) {
log.info("Updated '%1$s' with value '%2$s'\n", AVD_INI_IMAGES_2,
properties.get(AVD_INI_IMAGES_2));
}
status = AvdStatus.OK;
} else {
log.error(null, "Unable to find non empty system images folders for %1$s",
avd.getName());
//FIXME: display paths to empty image folders?
status = AvdStatus.ERROR_IMAGE_DIR;
}
return updateAvd(avd, properties, status, log);
}
示例30
/**
* Creates a new queue, with a number of dedicated threads to process
* the queue's jobs.
*
* @param logger to log messages
* @param queueName a meaningful descriptive name.
* @param workforce the number of dedicated threads for this queue.
* @param growthTriggerRatio the ratio between outstanding requests and worker threads that
* should trigger a growth in worker threads.
*/
public WorkQueue(
@NonNull ILogger logger,
@NonNull QueueThreadContext<T> queueThreadContext,
@NonNull String queueName,
int workforce,
float growthTriggerRatio) {
this.mLogger = logger;
this.mName = queueName;
this.mGrowthTriggerRation = growthTriggerRatio;
this.mMWorkforceIncrement = workforce;
this.mQueueThreadContext = queueThreadContext;
}