Lint: Remove SdkWrapper and AnroidModelFacade (was needed in Android Studio 1.5)
This commit is contained in:
committed by
Yan Zhulanow
parent
7404b91cb3
commit
fee54d9b86
@@ -37,9 +37,12 @@ import com.android.ide.common.repository.ResourceVisibilityLookup;
|
||||
import com.android.ide.common.res2.AbstractResourceRepository;
|
||||
import com.android.ide.common.res2.ResourceItem;
|
||||
import com.android.prefs.AndroidLocation;
|
||||
import com.android.repository.api.ProgressIndicator;
|
||||
import com.android.repository.api.ProgressIndicatorAdapter;
|
||||
import com.android.sdklib.BuildToolInfo;
|
||||
import com.android.sdklib.IAndroidTarget;
|
||||
import com.android.sdklib.SdkVersionInfo;
|
||||
import com.android.sdklib.repositoryv2.AndroidSdkHandler;
|
||||
import com.android.tools.klint.detector.api.Context;
|
||||
import com.android.tools.klint.detector.api.Detector;
|
||||
import com.android.tools.klint.detector.api.Issue;
|
||||
@@ -741,9 +744,12 @@ public abstract class LintClient {
|
||||
@NonNull
|
||||
public IAndroidTarget[] getTargets() {
|
||||
if (mTargets == null) {
|
||||
SdkWrapper localSdk = getSdk();
|
||||
if (localSdk != null) {
|
||||
mTargets = localSdk.getTargets();
|
||||
AndroidSdkHandler sdkHandler = getSdk();
|
||||
if (sdkHandler != null) {
|
||||
ProgressIndicator logger = getRepositoryLogger();
|
||||
Collection<IAndroidTarget> targets = sdkHandler.getAndroidTargetManager(logger)
|
||||
.getTargets(logger);
|
||||
mTargets = targets.toArray(new IAndroidTarget[targets.size()]);
|
||||
} else {
|
||||
mTargets = new IAndroidTarget[0];
|
||||
}
|
||||
@@ -752,7 +758,7 @@ public abstract class LintClient {
|
||||
return mTargets;
|
||||
}
|
||||
|
||||
protected SdkWrapper mSdk;
|
||||
protected AndroidSdkHandler mSdk;
|
||||
|
||||
/**
|
||||
* Returns the SDK installation (used to look up platforms etc)
|
||||
@@ -760,13 +766,13 @@ public abstract class LintClient {
|
||||
* @return the SDK if known
|
||||
*/
|
||||
@Nullable
|
||||
public SdkWrapper getSdk() {
|
||||
if (mSdk == null) {
|
||||
File sdkHome = getSdkHome();
|
||||
if (sdkHome != null) {
|
||||
mSdk = SdkWrapper.createLocalSdk(sdkHome);
|
||||
}
|
||||
}
|
||||
public AndroidSdkHandler getSdk() {
|
||||
if (mSdk == null) {
|
||||
File sdkHome = getSdkHome();
|
||||
if (sdkHome != null) {
|
||||
mSdk = AndroidSdkHandler.getInstance(sdkHome);
|
||||
}
|
||||
}
|
||||
|
||||
return mSdk;
|
||||
}
|
||||
@@ -1217,4 +1223,33 @@ public abstract class LintClient {
|
||||
public static boolean isGradle() {
|
||||
return CLIENT_GRADLE.equals(sClientName);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public ProgressIndicator getRepositoryLogger() {
|
||||
return new LintClient.RepoLogger();
|
||||
}
|
||||
|
||||
private static final class RepoLogger extends ProgressIndicatorAdapter {
|
||||
// Intentionally not logging these: the SDK manager is
|
||||
// logging events such as package.xml parsing
|
||||
// Parsing /path/to/sdk//build-tools/19.1.0/package.xml
|
||||
// Parsing /path/to/sdk//build-tools/20.0.0/package.xml
|
||||
// Parsing /path/to/sdk//build-tools/21.0.0/package.xml
|
||||
// which we don't want to spam on the console.
|
||||
// It's also warning about packages that it's encountering
|
||||
// multiple times etc; that's not something we should include
|
||||
// in lint command line output.
|
||||
|
||||
@Override
|
||||
public void logError(@NonNull String s, @Nullable Throwable e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logInfo(@NonNull String s) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logWarning(@NonNull String s, @Nullable Throwable e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.ide.common.res2.ResourceItem;
|
||||
import com.android.resources.ResourceFolderType;
|
||||
import com.android.sdklib.BuildToolInfo;
|
||||
import com.android.sdklib.IAndroidTarget;
|
||||
import com.android.sdklib.repositoryv2.AndroidSdkHandler;
|
||||
import com.android.tools.klint.client.api.LintListener.EventType;
|
||||
import com.android.tools.klint.detector.api.ClassContext;
|
||||
import com.android.tools.klint.detector.api.Context;
|
||||
@@ -2129,7 +2130,7 @@ public class LintDriver {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public SdkWrapper getSdk() {
|
||||
public AndroidSdkHandler getSdk() {
|
||||
return mDelegate.getSdk();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.tools.klint.client.api
|
||||
|
||||
import com.android.sdklib.IAndroidTarget
|
||||
import java.io.File
|
||||
|
||||
class SdkWrapper(val sdk: Any) {
|
||||
|
||||
companion object {
|
||||
val PROGRESS_INDICATOR_CLASS_NAME = "com.android.repository.api.ConsoleProgressIndicator"
|
||||
|
||||
@JvmStatic
|
||||
fun createLocalSdk(file: File): SdkWrapper? {
|
||||
try {
|
||||
val clazz = Class.forName("com.android.sdklib.repository.local.LocalSdk")
|
||||
return SdkWrapper(clazz.getConstructor(File::class.java).newInstance(file))
|
||||
}
|
||||
catch (t: Throwable) {
|
||||
try {
|
||||
val clazz = Class.forName("com.android.sdklib.repositoryv2.AndroidSdkHandler")
|
||||
return SdkWrapper(clazz.getMethod("getInstance", File::class.java).invoke(null, file))
|
||||
}
|
||||
catch (t2: Throwable) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getTargets(): Array<IAndroidTarget>? {
|
||||
try {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return sdk.javaClass.getMethod("getTargets").invoke(sdk) as? Array<IAndroidTarget>
|
||||
} catch (t: Throwable) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
try {
|
||||
val targets = sdk.javaClass
|
||||
.getMethod("getAndroidTargetManager", Class.forName(PROGRESS_INDICATOR_CLASS_NAME))
|
||||
.invoke(sdk, createProgressIndicator()) as? Collection<IAndroidTarget> ?: return null
|
||||
return targets.toTypedArray()
|
||||
}
|
||||
catch (t2: Throwable) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getPlatformVersion(): String? {
|
||||
try {
|
||||
val pkgPlatformTools = Class.forName("com.android.sdklib.repository.descriptors.PkgType")
|
||||
.getField("PKG_PLATFORM_TOOLS").get(null)
|
||||
val pkgInfo = sdk.javaClass.declaredMethods
|
||||
.first { it.name == "getPkgInfo" && it.parameterTypes.size == 1 }
|
||||
.invoke(sdk, pkgPlatformTools)
|
||||
if (pkgInfo != null) {
|
||||
val desc = pkgInfo.javaClass.getMethod("getDesc").invoke(pkgInfo)
|
||||
val version = desc.javaClass.getMethod("getFullRevision").invoke(desc)
|
||||
if (version != null) {
|
||||
return version.javaClass.getMethod("toShortString").invoke(version) as? String
|
||||
}
|
||||
}
|
||||
else {
|
||||
return null
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
try {
|
||||
val pkgPlatformTools = Class.forName("com.android.SdkConstants")
|
||||
.getField("FD_PLATFORM_TOOLS").get(null)
|
||||
val pkgInfo = sdk.javaClass.declaredMethods
|
||||
.first { it.name == "getLocalPackage" && it.parameterTypes.size == 2 }
|
||||
.invoke(sdk, pkgPlatformTools, createProgressIndicator())
|
||||
if (pkgInfo != null) {
|
||||
val version = pkgInfo.javaClass.getMethod("getVersion").invoke(pkgInfo)
|
||||
return version.javaClass.getMethod("toShortString").invoke(version) as? String
|
||||
}
|
||||
else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
catch (ignore: Throwable) {}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
private fun createProgressIndicator(): Any {
|
||||
return Class.forName(PROGRESS_INDICATOR_CLASS_NAME).newInstance()
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,7 @@ import com.android.builder.model.AndroidProject;
|
||||
import com.android.builder.model.ProductFlavor;
|
||||
import com.android.builder.model.ProductFlavorContainer;
|
||||
import com.android.builder.model.Variant;
|
||||
import com.android.ide.common.repository.GradleVersion;
|
||||
import com.android.ide.common.repository.ResourceVisibilityLookup;
|
||||
import com.android.resources.Density;
|
||||
import com.android.resources.ResourceFolderType;
|
||||
@@ -136,6 +137,7 @@ public class Project {
|
||||
protected Boolean mGradleProject;
|
||||
protected Boolean mSupportLib;
|
||||
protected Boolean mAppCompat;
|
||||
protected GradleVersion mGradleVersion;
|
||||
private Map<String, String> mSuperClassMap;
|
||||
private ResourceVisibilityLookup mResourceVisibility;
|
||||
private BuildToolInfo mBuildTools;
|
||||
@@ -190,6 +192,24 @@ public class Project {
|
||||
public AndroidProject getGradleProjectModel() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* If this is a Gradle project with a valid Gradle model, return the version
|
||||
* of the model/plugin.
|
||||
*
|
||||
* @return the Gradle plugin version, or null if invalid or not a Gradle project
|
||||
*/
|
||||
@Nullable
|
||||
public GradleVersion getGradleModelVersion() {
|
||||
if (mGradleVersion == null && isGradleProject()) {
|
||||
AndroidProject gradleProjectModel = getGradleProjectModel();
|
||||
if (gradleProjectModel != null) {
|
||||
mGradleVersion = GradleVersion.tryParse(gradleProjectModel.getModelVersion());
|
||||
}
|
||||
}
|
||||
|
||||
return mGradleVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the project model for this project if it corresponds to
|
||||
|
||||
Reference in New Issue
Block a user