Skip to content

Commit 8c3936a

Browse files
committed
Update to UAST 0.12
1 parent 3bf7223 commit 8c3936a

File tree

61 files changed

+180
-370
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+180
-370
lines changed

idea/idea-android/src/org/jetbrains/kotlin/android/folding/ResourceFoldingBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class ResourceFoldingBuilder : FoldingBuilderEx() {
102102

103103
val element = getOutermostQualified() ?: this
104104

105-
(element.containingElement as? UCallExpression)?.run {
105+
(element.uastParent as? UCallExpression)?.run {
106106
if (isFoldableGetResourceValueCall()) {
107107
return getOutermostQualified()?.createFoldingDescriptor() ?: createFoldingDescriptor()
108108
}

plugins/lint/lint-api/src/com/android/tools/klint/client/api/LintDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2622,7 +2622,7 @@ public boolean isSuppressed(@Nullable JavaContext context, @NonNull Issue issue,
26222622
return true;
26232623
}
26242624

2625-
scope = scope.getContainingElement();
2625+
scope = scope.getUastParent();
26262626
if (scope instanceof PsiFile) {
26272627
return false;
26282628
}

plugins/lint/lint-api/src/com/android/tools/klint/client/api/UElementVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ private void checkClass(@NonNull UClass node) {
477477
}
478478
}
479479

480-
cls = cls.getUastSuperClass();
480+
cls = cls.getSuperClass();
481481
depth++;
482482
if (depth == 500) {
483483
// Shouldn't happen in practice; this prevents the IDE from

plugins/lint/lint-api/src/com/android/tools/klint/detector/api/LintUtils.java

Lines changed: 10 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -16,41 +16,6 @@
1616

1717
package com.android.tools.klint.detector.api;
1818

19-
import static com.android.SdkConstants.ANDROID_MANIFEST_XML;
20-
import static com.android.SdkConstants.ANDROID_PREFIX;
21-
import static com.android.SdkConstants.ANDROID_URI;
22-
import static com.android.SdkConstants.ATTR_LOCALE;
23-
import static com.android.SdkConstants.BIN_FOLDER;
24-
import static com.android.SdkConstants.DOT_GIF;
25-
import static com.android.SdkConstants.DOT_JPEG;
26-
import static com.android.SdkConstants.DOT_JPG;
27-
import static com.android.SdkConstants.DOT_PNG;
28-
import static com.android.SdkConstants.DOT_WEBP;
29-
import static com.android.SdkConstants.DOT_XML;
30-
import static com.android.SdkConstants.FN_BUILD_GRADLE;
31-
import static com.android.SdkConstants.ID_PREFIX;
32-
import static com.android.SdkConstants.NEW_ID_PREFIX;
33-
import static com.android.SdkConstants.TOOLS_URI;
34-
import static com.android.SdkConstants.UTF_8;
35-
import static com.android.ide.common.resources.configuration.FolderConfiguration.QUALIFIER_SPLITTER;
36-
import static com.android.ide.common.resources.configuration.LocaleQualifier.BCP_47_PREFIX;
37-
import static com.android.tools.klint.client.api.JavaParser.TYPE_BOOLEAN;
38-
import static com.android.tools.klint.client.api.JavaParser.TYPE_BOOLEAN_WRAPPER;
39-
import static com.android.tools.klint.client.api.JavaParser.TYPE_BYTE;
40-
import static com.android.tools.klint.client.api.JavaParser.TYPE_BYTE_WRAPPER;
41-
import static com.android.tools.klint.client.api.JavaParser.TYPE_CHAR;
42-
import static com.android.tools.klint.client.api.JavaParser.TYPE_CHARACTER_WRAPPER;
43-
import static com.android.tools.klint.client.api.JavaParser.TYPE_DOUBLE;
44-
import static com.android.tools.klint.client.api.JavaParser.TYPE_DOUBLE_WRAPPER;
45-
import static com.android.tools.klint.client.api.JavaParser.TYPE_FLOAT;
46-
import static com.android.tools.klint.client.api.JavaParser.TYPE_FLOAT_WRAPPER;
47-
import static com.android.tools.klint.client.api.JavaParser.TYPE_INT;
48-
import static com.android.tools.klint.client.api.JavaParser.TYPE_INTEGER_WRAPPER;
49-
import static com.android.tools.klint.client.api.JavaParser.TYPE_LONG;
50-
import static com.android.tools.klint.client.api.JavaParser.TYPE_LONG_WRAPPER;
51-
import static com.android.tools.klint.client.api.JavaParser.TYPE_SHORT;
52-
import static com.android.tools.klint.client.api.JavaParser.TYPE_SHORT_WRAPPER;
53-
5419
import com.android.annotations.NonNull;
5520
import com.android.annotations.Nullable;
5621
import com.android.builder.model.AndroidProject;
@@ -78,39 +43,30 @@
7843
import com.google.common.collect.Iterables;
7944
import com.google.common.collect.Lists;
8045
import com.google.common.collect.Sets;
81-
import com.intellij.psi.CommonClassNames;
82-
import com.intellij.psi.PsiClassType;
83-
import com.intellij.psi.PsiElement;
84-
import com.intellij.psi.PsiImportStatement;
85-
import com.intellij.psi.PsiLiteral;
86-
import com.intellij.psi.PsiParenthesizedExpression;
87-
import com.intellij.psi.PsiType;
88-
import com.intellij.psi.PsiWhiteSpace;
89-
90-
import org.jetbrains.uast.UElement;
91-
import org.jetbrains.uast.UParenthesizedExpression;
46+
import com.intellij.psi.*;
47+
import lombok.ast.ImportDeclaration;
9248
import org.jetbrains.org.objectweb.asm.Opcodes;
9349
import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode;
9450
import org.jetbrains.org.objectweb.asm.tree.ClassNode;
9551
import org.jetbrains.org.objectweb.asm.tree.FieldNode;
52+
import org.jetbrains.uast.UElement;
53+
import org.jetbrains.uast.UParenthesizedExpression;
9654
import org.w3c.dom.Element;
9755
import org.w3c.dom.Node;
9856
import org.w3c.dom.NodeList;
9957

10058
import java.io.File;
10159
import java.io.IOException;
10260
import java.io.UnsupportedEncodingException;
103-
import java.util.ArrayDeque;
104-
import java.util.ArrayList;
105-
import java.util.Collections;
106-
import java.util.List;
107-
import java.util.Queue;
108-
import java.util.Set;
61+
import java.util.*;
10962
import java.util.regex.Matcher;
11063
import java.util.regex.Pattern;
11164
import java.util.regex.PatternSyntaxException;
11265

113-
import lombok.ast.ImportDeclaration;
66+
import static com.android.SdkConstants.*;
67+
import static com.android.ide.common.resources.configuration.FolderConfiguration.QUALIFIER_SPLITTER;
68+
import static com.android.ide.common.resources.configuration.LocaleQualifier.BCP_47_PREFIX;
69+
import static com.android.tools.klint.client.api.JavaParser.*;
11470

11571

11672
/**
@@ -1299,7 +1255,7 @@ public static PsiElement skipParentheses(@Nullable PsiElement element) {
12991255
@Nullable
13001256
public static UElement skipParentheses(@Nullable UElement element) {
13011257
while (element instanceof UParenthesizedExpression) {
1302-
element = element.getContainingElement();
1258+
element = element.getUastParent();
13031259
}
13041260

13051261
return element;

plugins/lint/lint-checks/src/com/android/tools/klint/checks/AnnotationDetector.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public boolean visitAnnotation(@NonNull UAnnotation annotation) {
179179
}
180180

181181
if (FQCN_SUPPRESS_LINT.equals(type)) {
182-
UElement parent = annotation.getContainingElement();
182+
UElement parent = annotation.getUastParent();
183183
if (parent == null) {
184184
return false;
185185
}
@@ -218,8 +218,8 @@ public boolean visitAnnotation(@NonNull UAnnotation annotation) {
218218
} else if (type.startsWith(SUPPORT_ANNOTATIONS_PREFIX)) {
219219
if (CHECK_RESULT_ANNOTATION.equals(type)) {
220220
// Check that the return type of this method is not void!
221-
if (annotation.getContainingElement() instanceof UMethod) {
222-
UMethod method = (UMethod) annotation.getContainingElement();
221+
if (annotation.getUastParent() instanceof UMethod) {
222+
UMethod method = (UMethod) annotation.getUastParent();
223223
if (!method.isConstructor()
224224
&& PsiType.VOID.equals(method.getReturnType())) {
225225
mContext.report(ANNOTATION_USAGE, annotation.getPsi(),
@@ -284,7 +284,7 @@ public boolean visitAnnotation(@NonNull UAnnotation annotation) {
284284
PERMISSION_ANNOTATION_WRITE.equals(type)) {
285285
// Check that if there are no arguments, this is specified on a parameter,
286286
// and conversely, on methods and fields there is a valid argument.
287-
if (annotation.getContainingElement() instanceof UMethod) {
287+
if (annotation.getUastParent() instanceof UMethod) {
288288
String value = PermissionRequirement.getAnnotationStringValue(annotation, ATTR_VALUE);
289289
String[] anyOf = PermissionRequirement.getAnnotationStringValues(annotation, ATTR_ANY_OF);
290290
String[] allOf = PermissionRequirement.getAnnotationStringValues(annotation, ATTR_ALL_OF);
@@ -342,7 +342,7 @@ public boolean visitAnnotation(@NonNull UAnnotation annotation) {
342342

343343
private void checkTargetType(@NonNull UAnnotation node, @NonNull String type1,
344344
@Nullable String type2, boolean allowCollection) {
345-
UElement parent = node.getContainingElement();
345+
UElement parent = node.getUastParent();
346346
PsiType type;
347347

348348
if (parent instanceof UDeclarationsExpression) {

plugins/lint/lint-checks/src/com/android/tools/klint/checks/ApiDetector.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,7 @@ private static boolean isBenignConstantUsage(
851851

852852
// It's okay to reference the constant as a case constant (since that
853853
// code path won't be taken) or in a condition of an if statement
854-
UElement curr = node.getContainingElement();
854+
UElement curr = node.getUastParent();
855855
while (curr != null) {
856856
if (curr instanceof USwitchClauseExpression) {
857857
List<UExpression> caseValues = ((USwitchClauseExpression) curr).getCaseValues();
@@ -869,7 +869,7 @@ private static boolean isBenignConstantUsage(
869869
} else if (curr instanceof UMethod || curr instanceof UClass) {
870870
break;
871871
}
872-
curr = curr.getContainingElement();
872+
curr = curr.getUastParent();
873873
}
874874

875875
return false;
@@ -1536,7 +1536,7 @@ private static int getTargetApi(@Nullable UElement scope) {
15361536
return targetApi;
15371537
}
15381538
}
1539-
scope = scope.getContainingElement();
1539+
scope = scope.getUastParent();
15401540
if (scope instanceof PsiFile) {
15411541
break;
15421542
}
@@ -1730,7 +1730,7 @@ private static boolean isWithinVersionCheckConditional(
17301730
int api,
17311731
JavaContext context
17321732
) {
1733-
UElement current = element.getContainingElement();
1733+
UElement current = element.getUastParent();
17341734
UElement prev = element;
17351735
while (current != null) {
17361736
if (current instanceof UIfExpression) {
@@ -1747,7 +1747,7 @@ private static boolean isWithinVersionCheckConditional(
17471747
return false;
17481748
}
17491749
prev = current;
1750-
current = current.getContainingElement();
1750+
current = current.getUastParent();
17511751
}
17521752

17531753
return false;

plugins/lint/lint-checks/src/com/android/tools/klint/checks/CallSuperDetector.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,28 @@
1616

1717
package com.android.tools.klint.checks;
1818

19-
import static com.android.SdkConstants.CLASS_VIEW;
20-
import static com.android.SdkConstants.SUPPORT_ANNOTATIONS_PREFIX;
21-
import static com.android.tools.klint.checks.SupportAnnotationDetector.filterRelevantAnnotations;
22-
import static com.android.tools.klint.detector.api.LintUtils.skipParentheses;
23-
2419
import com.android.annotations.NonNull;
2520
import com.android.annotations.Nullable;
2621
import com.android.tools.klint.client.api.JavaEvaluator;
27-
import com.android.tools.klint.detector.api.Category;
28-
import com.android.tools.klint.detector.api.Detector;
29-
import com.android.tools.klint.detector.api.Implementation;
30-
import com.android.tools.klint.detector.api.Issue;
31-
import com.android.tools.klint.detector.api.JavaContext;
32-
import com.android.tools.klint.detector.api.Location;
33-
import com.android.tools.klint.detector.api.Scope;
34-
import com.android.tools.klint.detector.api.Severity;
22+
import com.android.tools.klint.detector.api.*;
3523
import com.intellij.psi.PsiAnnotation;
3624
import com.intellij.psi.PsiElement;
3725
import com.intellij.psi.PsiMethod;
38-
3926
import org.jetbrains.uast.UElement;
4027
import org.jetbrains.uast.UMethod;
41-
import org.jetbrains.uast.USuperExpression;
4228
import org.jetbrains.uast.UReferenceExpression;
29+
import org.jetbrains.uast.USuperExpression;
4330
import org.jetbrains.uast.visitor.AbstractUastVisitor;
4431
import org.jetbrains.uast.visitor.UastVisitor;
4532

4633
import java.util.Collections;
4734
import java.util.List;
4835

36+
import static com.android.SdkConstants.CLASS_VIEW;
37+
import static com.android.SdkConstants.SUPPORT_ANNOTATIONS_PREFIX;
38+
import static com.android.tools.klint.checks.SupportAnnotationDetector.filterRelevantAnnotations;
39+
import static com.android.tools.klint.detector.api.LintUtils.skipParentheses;
40+
4941
/**
5042
* Makes sure that methods call super when overriding methods.
5143
*/
@@ -185,7 +177,7 @@ private SuperCallVisitor(@NonNull PsiMethod method) {
185177

186178
@Override
187179
public boolean visitSuperExpression(USuperExpression node) {
188-
UElement parent = skipParentheses(node.getContainingElement());
180+
UElement parent = skipParentheses(node.getUastParent());
189181
if (parent instanceof UReferenceExpression) {
190182
PsiElement resolved = ((UReferenceExpression) parent).resolve();
191183
if (mMethod.equals(resolved)) {

plugins/lint/lint-checks/src/com/android/tools/klint/checks/CleanupDetector.java

Lines changed: 13 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,61 +16,28 @@
1616

1717
package com.android.tools.klint.checks;
1818

19-
import static com.android.SdkConstants.CLASS_CONTENTPROVIDER;
20-
import static com.android.SdkConstants.CLASS_CONTEXT;
21-
import static com.android.tools.klint.detector.api.LintUtils.skipParentheses;
22-
import static org.jetbrains.uast.UastUtils.getOutermostQualified;
23-
import static org.jetbrains.uast.UastUtils.getParentOfType;
24-
import static org.jetbrains.uast.UastUtils.getQualifiedChain;
25-
2619
import com.android.SdkConstants;
2720
import com.android.annotations.NonNull;
2821
import com.android.annotations.Nullable;
2922
import com.android.tools.klint.client.api.JavaEvaluator;
30-
import com.android.tools.klint.detector.api.Category;
31-
import com.android.tools.klint.detector.api.Detector;
32-
import com.android.tools.klint.detector.api.Implementation;
33-
import com.android.tools.klint.detector.api.Issue;
34-
import com.android.tools.klint.detector.api.JavaContext;
35-
import com.android.tools.klint.detector.api.Location;
36-
import com.android.tools.klint.detector.api.Scope;
37-
import com.android.tools.klint.detector.api.Severity;
23+
import com.android.tools.klint.detector.api.*;
3824
import com.google.common.collect.Lists;
39-
import com.intellij.psi.PsiClass;
40-
import com.intellij.psi.PsiClassType;
41-
import com.intellij.psi.PsiElement;
42-
import com.intellij.psi.PsiField;
43-
import com.intellij.psi.PsiLocalVariable;
44-
import com.intellij.psi.PsiMethod;
45-
import com.intellij.psi.PsiType;
46-
import com.intellij.psi.PsiVariable;
47-
25+
import com.intellij.psi.*;
4826
import com.intellij.psi.util.InheritanceUtil;
4927
import com.intellij.util.containers.Predicate;
50-
import org.jetbrains.uast.UBinaryExpression;
51-
import org.jetbrains.uast.UCallExpression;
52-
import org.jetbrains.uast.UDoWhileExpression;
53-
import org.jetbrains.uast.UElement;
54-
import org.jetbrains.uast.UExpression;
55-
import org.jetbrains.uast.UField;
56-
import org.jetbrains.uast.UIfExpression;
57-
import org.jetbrains.uast.ULocalVariable;
58-
import org.jetbrains.uast.UMethod;
59-
import org.jetbrains.uast.UQualifiedReferenceExpression;
60-
import org.jetbrains.uast.UReturnExpression;
61-
import org.jetbrains.uast.UUnaryExpression;
62-
import org.jetbrains.uast.UVariable;
63-
import org.jetbrains.uast.UWhileExpression;
64-
import org.jetbrains.uast.UastCallKind;
65-
import org.jetbrains.uast.UastUtils;
66-
import org.jetbrains.uast.UReferenceExpression;
28+
import org.jetbrains.uast.*;
6729
import org.jetbrains.uast.util.UastExpressionUtils;
6830
import org.jetbrains.uast.visitor.AbstractUastVisitor;
6931
import org.jetbrains.uast.visitor.UastVisitor;
7032

7133
import java.util.Arrays;
7234
import java.util.List;
7335

36+
import static com.android.SdkConstants.CLASS_CONTENTPROVIDER;
37+
import static com.android.SdkConstants.CLASS_CONTEXT;
38+
import static com.android.tools.klint.detector.api.LintUtils.skipParentheses;
39+
import static org.jetbrains.uast.UastUtils.*;
40+
7441
/**
7542
* Checks for missing {@code recycle} calls on resources that encourage it, and
7643
* for missing {@code commit} calls on FragmentTransactions, etc.
@@ -718,10 +685,10 @@ private static void suggestApplyIfApplicable(@NonNull JavaContext context,
718685
// apply if the return value is not considered
719686

720687
UElement qualifiedNode = node;
721-
UElement parent = skipParentheses(node.getContainingElement());
688+
UElement parent = skipParentheses(node.getUastParent());
722689
while (parent instanceof UReferenceExpression) {
723690
qualifiedNode = parent;
724-
parent = skipParentheses(parent.getContainingElement());
691+
parent = skipParentheses(parent.getUastParent());
725692
}
726693
boolean returnValueIgnored = true;
727694

@@ -761,17 +728,17 @@ public static PsiVariable getVariableElement(@NonNull UCallExpression rhs) {
761728
public static PsiVariable getVariableElement(@NonNull UCallExpression rhs,
762729
boolean allowChainedCalls) {
763730
UElement parent = skipParentheses(
764-
UastUtils.getQualifiedParentOrThis(rhs).getContainingElement());
731+
UastUtils.getQualifiedParentOrThis(rhs).getUastParent());
765732

766733
// Handle some types of chained calls; e.g. you might have
767734
// var = prefs.edit().put(key,value)
768735
// and here we want to skip past the put call
769736
if (allowChainedCalls) {
770737
while (true) {
771738
if ((parent instanceof UQualifiedReferenceExpression)) {
772-
UElement parentParent = skipParentheses(parent.getContainingElement());
739+
UElement parentParent = skipParentheses(parent.getUastParent());
773740
if ((parentParent instanceof UQualifiedReferenceExpression)) {
774-
parent = skipParentheses(parentParent.getContainingElement());
741+
parent = skipParentheses(parentParent.getUastParent());
775742
} else if (parentParent instanceof UVariable
776743
|| parentParent instanceof UBinaryExpression) {
777744
parent = parentParent;

0 commit comments

Comments
 (0)