@Override public void visitAttribute(XmlContext xmlContext, Attr attr) { String fileName = xmlContext.file.getName(); if (!fileName.equals(ONLY_FILE_ALLOWED_TO_HAVE_HARDCODED_COLORS)) { String value = attr.getValue(); if (value.startsWith(HARDCODED_COLOR_PREFIX)) { xmlContext.report(ISSUE, attr, xmlContext.getLocation(attr), ISSUE.getBriefDescription(TextFormat.TEXT)); } } }
@Override public void visitAttribute(XmlContext xmlContext, Attr attr) { String fileName = xmlContext.file.getName(); if (!fileName.equals(ALLOWED_COLORS_FILENAME)) { String value = attr.getValue(); if (value.startsWith(PALETTE_COLOR_PREFIX)) { xmlContext.report(ISSUE, attr, xmlContext.getLocation(attr), ISSUE.getBriefDescription(TextFormat.TEXT)); } } }
@Override public void visitElement(XmlContext xmlContext, Element element) { String fileName = xmlContext.file.getName(); if (fileName.equals(ALLOWED_COLORS_FILENAME)) { String elementValue = element.getFirstChild().getNodeValue(); if (xmlElementIsNotTheParentResourceTag(elementValue) && !elementValue.startsWith(PALETTE_COLOR_PREFIX)) { xmlContext.report(ISSUE, element, xmlContext.getLocation(element), ISSUE.getBriefDescription(TextFormat.TEXT)); } } }
@Override public void visitMethod(JavaContext javaContext, JavaElementVisitor visitor, PsiMethodCallExpression call, PsiMethod method) { PsiReferenceExpression methodExpression = call.getMethodExpression(); String fullyQualifiedMethodName = methodExpression.getQualifiedName(); if (fullyQualifiedMethodName.startsWith("android.util.Log.")) { javaContext.report(ISSUE, javaContext.getLocation(methodExpression), ISSUE.getBriefDescription(TextFormat.TEXT)); } }
private static void listIssue(PrintStream out, Issue issue) { out.print(wrapArg("\"" + issue.getId() + "\": " + issue.getBriefDescription(TEXT))); }
/** * All param should be non-null. */ void reportIssue(JavaContext context, Issue issue, PsiElement element) { context.report(issue, element, context.getLocation(element), issue.getBriefDescription(TextFormat.TEXT)); } }
private static void describeIssue(Issue issue) { System.out.println(issue.getId()); for (int i = 0; i < issue.getId().length(); i++) { System.out.print('-'); } System.out.println(); System.out.println(wrap("Summary: " + issue.getBriefDescription(TEXT))); System.out.println("Priority: " + issue.getPriority() + " / 10"); System.out.println("Severity: " + issue.getDefaultSeverity().getDescription()); System.out.println("Category: " + issue.getCategory().getFullName()); if (!issue.isEnabledByDefault()) { System.out.println("NOTE: This issue is disabled by default!"); System.out.println(String.format("You can enable it by adding %1$s %2$s", ARG_ENABLE, issue.getId())); } System.out.println(); System.out.println(wrap(issue.getExplanation(TEXT))); List<String> moreInfo = issue.getMoreInfo(); if (!moreInfo.isEmpty()) { System.out.println("More information: "); for (String uri : moreInfo) { System.out.println(uri); } } }
String description = issue.getBriefDescription(HTML); writer.write(description); if (!description.isEmpty()
writer.write(issue.getId()); writer.write(": "); writer.write(issue.getBriefDescription(HTML)); writer.write("</a>\n");
/** * Test that an invalid AndroidManifest.xml has a warning. */ public void testInvalidManifest() throws Exception { String warningMessage = MinSdkDetectorTest.class.getSimpleName() + "_" + Thread.currentThread().getStackTrace()[1].getMethodName() + ": Warning: " + MinSdkDetector.ISSUE.getBriefDescription(TextFormat.TEXT) + " [" + MinSdkDetector.ISSUE.getId() + "]\n" + "0 errors, 1 warnings\n"; assertEquals( warningMessage, lintFiles("InvalidAndroidManifest.xml=>AndroidManifest.xml") ); }
writer.write(issue.getId()); writer.write(": "); writer.write(issue.getBriefDescription(HTML)); writer.write("</a><div class=\"issueSeparator\"></div>\n"); writer.write("</div>\n");
/** * Test that a java file where a subscription is not bound using RxLifecycle */ public void testRxLifecycleNotBound() throws Exception { String file = "bin/classes/LifecycleNotBoundKotlin.kt.class"; String warningMessage = file + ": Error: " + RxLifecycleDetector.ISSUE.getBriefDescription(TextFormat.TEXT) + " [" + RxLifecycleDetector.ISSUE.getId() + "]\n" + "1 errors, 0 warnings\n"; assertEquals(warningMessage, lintClassFile(file)); }
issue.getBriefDescription(RAW)); writeAttribute(writer, 2, "explanation", issue.getExplanation(RAW));
/** * Test that a java file with an enum has a warning. */ public void testEnumCase() throws Exception { String file = "EnumTestCase.java"; String warningMessage = file + ": Warning: " + EnumDetector.ISSUE.getBriefDescription(TextFormat.TEXT) + " [" + EnumDetector.ISSUE.getId() + "]\n" + "0 errors, 1 warnings\n"; assertEquals( warningMessage, lintFiles(file) ); }
/** * Test that a java file with a to-do has a warning. */ public void testTodoCase() throws Exception { String file = "TodoTestCase.java"; String warningMessage = file + ":5: Warning: " + TodoDetector.ISSUE.getBriefDescription(TextFormat.TEXT) + " [" + TodoDetector.ISSUE.getId() + "]\n" + " // TODO\n" + " ~~~~\n" + "0 errors, 1 warnings\n"; assertEquals( warningMessage, lintFiles(file) ); }
/** * Test that a java file with a to-do has a warning. */ public void testTodoCase() throws Exception { String file = "TodoTestCase.java"; String warningMessage = file + ":5: Warning: " + TodoDetector.ISSUE.getBriefDescription(TextFormat.TEXT) + " [" + TodoDetector.ISSUE.getId() + "]\n" + " // TODO\n" + " ~~~~\n" + "0 errors, 1 warnings\n"; assertEquals( warningMessage, lintFiles(file) ); }
Warning first = warnings.get(0); String anchor = first.issue.getId(); String desc = first.issue.getBriefDescription(TextFormat.HTML); append(" <a class=\"mdl-navigation__link\" href=\"#" + anchor + "\">");
private static boolean isIgnoredInIde(@NonNull Issue issue, @NonNull JavaContext context, @NonNull PsiElement node) { // Historically, the IDE would treat *all* support annotation warnings as // handled by the id "ResourceType", so look for that id too for issues // deliberately suppressed prior to Android Studio 2.0. Issue synonym = Issue.create("ResourceType", issue.getBriefDescription(TextFormat.RAW), issue.getExplanation(TextFormat.RAW), issue.getCategory(), issue.getPriority(), issue.getDefaultSeverity(), issue.getImplementation()); return context.getDriver().isSuppressed(context, synonym, node); }
append("</a>"); append(": "); append(issue.getBriefDescription(HTML));
append("</div>\n"); //class=chips }, XmlUtils.toXmlTextValue(firstIssue.getBriefDescription(TextFormat.TEXT)), true, new Action("Explain", getExplanationId(firstIssue), "reveal")); // HTML style isn't handled right by card widget