| package com.android.build.gradle.internal; |
| |
| import com.android.annotations.NonNull; |
| import com.android.annotations.Nullable; |
| import com.android.builder.model.AndroidProject; |
| import com.android.builder.model.Variant; |
| import com.android.tools.lint.client.api.LintRequest; |
| import com.android.tools.lint.detector.api.Project; |
| import com.android.utils.Pair; |
| |
| import java.io.File; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| |
| class LintGradleRequest extends LintRequest { |
| @NonNull private final LintGradleClient mLintClient; |
| @NonNull private final org.gradle.api.Project mGradleProject; |
| @Nullable private final String mVariantName; |
| @NonNull private final AndroidProject mModelProject; |
| |
| public LintGradleRequest( |
| @NonNull LintGradleClient client, |
| @NonNull AndroidProject modelProject, |
| @NonNull org.gradle.api.Project gradleProject, |
| @Nullable String variantName, |
| @NonNull List<File> files) { |
| super(client, files); |
| mLintClient = client; |
| mModelProject = modelProject; |
| mGradleProject = gradleProject; |
| mVariantName = variantName; |
| } |
| |
| @Nullable |
| @Override |
| public Collection<Project> getProjects() { |
| if (mProjects == null) { |
| Variant variant = findVariant(mModelProject, mVariantName); |
| if (variant == null) { |
| mProjects = Collections.emptyList(); |
| return mProjects; |
| } |
| Pair<LintGradleProject,List<File>> result = LintGradleProject.create( |
| mLintClient, mModelProject, variant, mGradleProject); |
| mProjects = Collections.<Project>singletonList(result.getFirst()); |
| mLintClient.setCustomRules(result.getSecond()); |
| } |
| |
| return mProjects; |
| } |
| |
| private static Variant findVariant(@NonNull AndroidProject project, |
| @Nullable String variantName) { |
| if (variantName != null) { |
| for (Variant variant : project.getVariants()) { |
| if (variantName.equals(variant.getName())) { |
| return variant; |
| } |
| } |
| } |
| |
| if (!project.getVariants().isEmpty()) { |
| return project.getVariants().iterator().next(); |
| } |
| |
| return null; |
| } |
| } |