diff options
author | Tor Norbye <tnorbye@google.com> | 2020-12-07 14:14:31 -0800 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2021-01-19 16:21:15 -0800 |
commit | da348aca14a9e9354337e06c4aa43028d5bad61a (patch) | |
tree | 687a144a1964aa436824b171fb661e731293e3c4 /lint/src | |
parent | ec02c2e3d08a7c63e699801113a094ee8facc6a7 (diff) | |
download | idea-da348aca14a9e9354337e06c4aa43028d5bad61a.tar.gz |
Mandatory lint resource repositories
Lint now always provides resource repositories to clients. This CL
updates the IDE client to track the new API changes (as well as a rename
for one of the detectors to follow the canonical detector naming
convention.)
Test: Existing
Bug: None
Change-Id: Id95d59c633e35f6227a7badf22eae1d7a8bd2728
Diffstat (limited to 'lint/src')
-rw-r--r-- | lint/src/com/android/tools/idea/lint/common/DomPsiParser.java | 34 | ||||
-rw-r--r-- | lint/src/com/android/tools/idea/lint/common/LintIdeClient.java | 76 |
2 files changed, 92 insertions, 18 deletions
diff --git a/lint/src/com/android/tools/idea/lint/common/DomPsiParser.java b/lint/src/com/android/tools/idea/lint/common/DomPsiParser.java index 02940c1b64c..0e22746a553 100644 --- a/lint/src/com/android/tools/idea/lint/common/DomPsiParser.java +++ b/lint/src/com/android/tools/idea/lint/common/DomPsiParser.java @@ -17,6 +17,7 @@ package com.android.tools.idea.lint.common; import com.android.annotations.NonNull; import com.android.annotations.Nullable; +import com.android.tools.lint.client.api.LintClient; import com.android.tools.lint.client.api.XmlParser; import com.android.tools.lint.detector.api.Location; import com.android.tools.lint.detector.api.Position; @@ -48,12 +49,22 @@ class DomPsiParser extends XmlParser { @Override public int getNodeStartOffset(@NonNull XmlContext context, @NonNull Node node) { + return getNodeStartOffset(myClient, context.file, node); + } + + @Override + public int getNodeStartOffset(@NonNull LintClient client, @NonNull File file, @NonNull Node node) { TextRange textRange = DomPsiConverter.getTextRange(node); return textRange.getStartOffset(); } @Override public int getNodeEndOffset(@NonNull XmlContext context, @NonNull Node node) { + return getNodeEndOffset(myClient, context.file, node); + } + + @Override + public int getNodeEndOffset(@NonNull LintClient client, @NonNull File file, @NonNull Node node) { TextRange textRange = DomPsiConverter.getTextRange(node); return textRange.getEndOffset(); } @@ -147,6 +158,13 @@ class DomPsiParser extends XmlParser { @NonNull @Override + public Location getLocation(@NonNull LintClient client, + @NonNull File file, @NonNull Node node) { + return getLocation(file, node); + } + + @NonNull + @Override public Location getLocation(@NonNull File file, @NonNull Node node) { TextRange textRange = DomPsiConverter.getTextRange(node); Position start = new LintXmlPosition(node, textRange.getStartOffset()); @@ -166,19 +184,31 @@ class DomPsiParser extends XmlParser { @NonNull @Override public Location getNameLocation(@NonNull XmlContext context, @NonNull Node node) { + return getNameLocation(myClient, context.file, node); + } + + @NonNull + @Override + public Location getNameLocation(@NonNull LintClient client, @NonNull File file, @NonNull Node node) { TextRange textRange = DomPsiConverter.getTextNameRange(node); Position start = new LintXmlPosition(node, textRange.getStartOffset()); Position end = new LintXmlPosition(node, textRange.getEndOffset()); - return Location.create(context.file, start, end).withSource(node); + return Location.create(file, start, end).withSource(node); } @NonNull @Override public Location getValueLocation(@NonNull XmlContext context, @NonNull Attr node) { + return getValueLocation(myClient, context.file, node); + } + + @NonNull + @Override + public Location getValueLocation(@NonNull LintClient client, @NonNull File file, @NonNull Attr node) { TextRange textRange = DomPsiConverter.getTextValueRange(node); Position start = new LintXmlPosition(node, textRange.getStartOffset()); Position end = new LintXmlPosition(node, textRange.getEndOffset()); - return Location.create(context.file, start, end).withSource(node); + return Location.create(file, start, end).withSource(node); } @NonNull diff --git a/lint/src/com/android/tools/idea/lint/common/LintIdeClient.java b/lint/src/com/android/tools/idea/lint/common/LintIdeClient.java index 7c71c8426a1..0f71238de3f 100644 --- a/lint/src/com/android/tools/idea/lint/common/LintIdeClient.java +++ b/lint/src/com/android/tools/idea/lint/common/LintIdeClient.java @@ -18,7 +18,14 @@ package com.android.tools.idea.lint.common; import static com.android.tools.lint.detector.api.TextFormat.RAW; import com.android.annotations.NonNull; +import com.android.ide.common.rendering.api.ResourceNamespace; +import com.android.ide.common.resources.AbstractResourceRepository; +import com.android.ide.common.resources.ResourceItem; +import com.android.ide.common.resources.ResourceRepository; +import com.android.ide.common.resources.ResourceVisitor; +import com.android.ide.common.resources.SingleNamespaceResourceRepository; import com.android.ide.common.util.PathString; +import com.android.resources.ResourceType; import com.android.tools.lint.checks.ApiLookup; import com.android.tools.lint.client.api.Configuration; import com.android.tools.lint.client.api.ConfigurationHierarchy; @@ -27,6 +34,7 @@ import com.android.tools.lint.client.api.IssueRegistry; import com.android.tools.lint.client.api.LintClient; import com.android.tools.lint.client.api.LintDriver; import com.android.tools.lint.client.api.LintRequest; +import com.android.tools.lint.client.api.ResourceRepositoryScope; import com.android.tools.lint.client.api.UastParser; import com.android.tools.lint.client.api.XmlParser; import com.android.tools.lint.detector.api.Context; @@ -41,6 +49,8 @@ import com.android.tools.lint.helpers.DefaultUastParser; import com.android.tools.lint.model.LintModelLintOptions; import com.android.tools.lint.model.LintModelModule; import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ListMultimap; import com.google.common.io.Files; import com.intellij.analysis.AnalysisScope; import com.intellij.openapi.Disposable; @@ -58,7 +68,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.util.AbstractProgressIndicatorExBase; import com.intellij.openapi.progress.util.ProgressIndicatorUtils; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; @@ -112,7 +121,7 @@ public class LintIdeClient extends LintClient implements Disposable { protected final LintResult myLintResult; - public LintIdeClient(@NonNull Project project, @NotNull LintResult lintResult) { + public LintIdeClient(@NonNull Project project, @NonNull LintResult lintResult) { super(CLIENT_STUDIO); myProject = project; myLintResult = lintResult; @@ -144,6 +153,46 @@ public class LintIdeClient extends LintClient implements Disposable { return driver; } + @NonNull + @Override + public ResourceRepository getResources(@NonNull com.android.tools.lint.detector.api.Project project, + @NonNull ResourceRepositoryScope scope) { + // Non-Android: Empty repository + return new AbstractResourceRepository() { + @NonNull + @Override + protected ListMultimap<String, ResourceItem> getResourcesInternal(@NonNull ResourceNamespace namespace, + @NonNull ResourceType resourceType) { + return ImmutableListMultimap.of(); + } + + @NonNull + @Override + public ResourceVisitor.VisitResult accept(@NonNull ResourceVisitor visitor) { + return ResourceVisitor.VisitResult.ABORT; + } + + @NonNull + @Override + public Collection<ResourceItem> getPublicResources(@NonNull ResourceNamespace namespace, + @NonNull ResourceType type) { + return Collections.emptyList(); + } + + @NonNull + @Override + public Set<ResourceNamespace> getNamespaces() { + return Collections.emptySet(); + } + + @NonNull + @Override + public Collection<SingleNamespaceResourceRepository> getLeafResourceRepositories() { + return Collections.emptyList(); + } + }; + } + /** * Returns an {@link ApiLookup} service. * @@ -151,7 +200,7 @@ public class LintIdeClient extends LintClient implements Disposable { * @return an API lookup if one can be found */ @Nullable - public static ApiLookup getApiLookup(@NotNull Project project) { + public static ApiLookup getApiLookup(@NonNull Project project) { return ApiLookup.get(LintIdeSupport.get().createClient(project, new LintIgnoredResult())); } @@ -207,8 +256,8 @@ public class LintIdeClient extends LintClient implements Disposable { } @Nullable - protected Module findModuleForLintProject(@NotNull Project project, - @NotNull com.android.tools.lint.detector.api.Project lintProject) { + protected Module findModuleForLintProject(@NonNull Project project, + @NonNull com.android.tools.lint.detector.api.Project lintProject) { if (myModuleMap != null) { Module module = myModuleMap.get(lintProject); if (module != null) { @@ -437,13 +486,13 @@ public class LintIdeClient extends LintClient implements Disposable { } } - @NotNull + @NonNull @Override public XmlParser getXmlParser() { return new DomPsiParser(this); } - @NotNull + @NonNull @Override public UastParser getUastParser(@Nullable com.android.tools.lint.detector.api.Project project) { return new DefaultUastParser(project, myProject) { @@ -470,7 +519,7 @@ public class LintIdeClient extends LintClient implements Disposable { }; } - @NotNull + @NonNull @Override public GradleVisitor getGradleVisitor() { return new LintIdeGradleVisitor(); @@ -523,7 +572,7 @@ public class LintIdeClient extends LintClient implements Disposable { }); } - @NotNull + @NonNull private String readFile(@NonNull LintEditorResult lintEditorResult, @NonNull File file) { final VirtualFile vFile = LocalFileSystem.getInstance().findFileByIoFile(file); @@ -599,7 +648,7 @@ public class LintIdeClient extends LintClient implements Disposable { return ApplicationInfoEx.getInstanceEx().getStrictVersion(); } - @NotNull + @NonNull @Override public String getClientDisplayName() { // Returns for example "Android Studio" (but isn't hardcoded such that @@ -658,11 +707,6 @@ public class LintIdeClient extends LintClient implements Disposable { return result; } - @Override - public boolean supportsProjectResources() { - return true; - } - @Nullable @Override public URLConnection openConnection(@NonNull URL url) throws IOException { @@ -681,7 +725,7 @@ public class LintIdeClient extends LintClient implements Disposable { } @Override - @NotNull + @NonNull public ClassLoader createUrlClassLoader(@NonNull URL[] urls, @NonNull ClassLoader parent) { return UrlClassLoader.build().parent(parent).urls(urls).get(); } |