• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Java XmlContext类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中com.android.tools.lint.detector.api.XmlContext的典型用法代码示例。如果您正苦于以下问题:Java XmlContext类的具体用法?Java XmlContext怎么用?Java XmlContext使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



XmlContext类属于com.android.tools.lint.detector.api包,在下文中一共展示了XmlContext类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: visitAttribute

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) {
    // 判断资源文件夹是否存在
    Project project = context.getProject();
    List<File> resourceFolder = project.getResourceFolders();
    if (resourceFolder.isEmpty()) {
        return;
    }

    // 获取项目资源文件夹路径
    String resourcePath = resourceFolder.get(0).getAbsolutePath();
    // 获取 drawable 名字
    String drawableName = attribute.getValue().replace("@drawable/", "");
    try {
        // 若 drawable 为 Vector Drawable,则文件后缀为 xml,根据 resource 路径,drawable 名字,文件后缀拼接出完整路径
        FileInputStream fileInputStream = new FileInputStream(resourcePath + "/drawable/" + drawableName + ".xml");
        BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
        String line = reader.readLine();
        if (line.contains("vector")) {
            // 若文件存在,并且包含首行包含 vector,则为 Vector Drawable,抛出警告
            context.report(ISSUE_XML_VECTOR_DRAWABLE, attribute, context.getLocation(attribute), attribute.getValue() + " 为 Vector Drawable,请使用 Vector 属性进行设置,避免 4.0 及以下版本的系统产生 Crash");
        }
        fileInputStream.close();
    } catch (Exception ignored) {
    }
}
 
开发者ID:QMUI,项目名称:QMUI_Android,代码行数:27,代码来源:QMUIXmlVectorDrawableDetector.java


示例2: visitAttribute

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitAttribute(XmlContext context, Attr attribute) {
    super.visitAttribute(context, attribute);

    String value = attribute.getValue();
    if (Utils.stringIsEmpty(value)) return;

    //onClick 属性被赋值
    Element element = attribute.getOwnerElement();
    boolean has = element.hasAttributeNS(SdkConstants.ANDROID_URI, SdkConstants.ATTR_ID);
    if (!has) {

        Location location = context.getLocation(attribute);
        context.report(ISSUE_MISSING_ID, location, "the view with onClick attribute set should has id attribute");
    }
}
 
开发者ID:jessie345,项目名称:CustomLintRules,代码行数:17,代码来源:AutoPointLayoutOnclickDetector.java


示例3: checkCustomNamespace

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
private static void checkCustomNamespace(XmlContext context, Element element) {
    NamedNodeMap attributes = element.getAttributes();
    for (int i = 0, n = attributes.getLength(); i < n; i++) {
        Attr attribute = (Attr) attributes.item(i);
        if (attribute.getName().startsWith(XMLNS_PREFIX)) {
            String uri = attribute.getValue();
            if (uri != null && !uri.isEmpty() && uri.startsWith(URI_PREFIX)
                    && !uri.equals(ANDROID_URI)) {
                if (context.getProject().isGradleProject()) {
                    context.report(RES_AUTO, attribute, context.getValueLocation(attribute),
                        "In Gradle projects, always use `" + AUTO_URI + "` for custom " +
                        "attributes");
                } else {
                    context.report(CUSTOM_VIEW, attribute, context.getValueLocation(attribute),
                        "When using a custom namespace attribute in a library project, " +
                        "use the namespace `\"" + AUTO_URI + "\"` instead.");
                }
            }
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:22,代码来源:NamespaceDetector.java


示例4: visitAttribute

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) {
    String value = attribute.getValue();

    if (!value.isEmpty()) {

        // Make sure this is really one of the android: attributes
        if (!ANDROID_URI.equals(attribute.getNamespaceURI())) {
            return;
        }

        value = value.substring(5); // ignore "@+id/"

        if (!idCorrectFormat(value)) {
            context.report(ISSUE, attribute, context.getLocation(attribute),
                    String.format("The id \"%1$s\", should be written using lowerCamelCase.", value));
        }

    }
}
 
开发者ID:inaka,项目名称:lewis,代码行数:21,代码来源:LayoutIdFormat.java


示例5: replaceUrlWithValue

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
private static String replaceUrlWithValue(@NonNull XmlContext context,
        @NonNull String str) {
    Project project = context.getProject();
    LintClient client = context.getClient();
    if (!client.supportsProjectResources()) {
        return str;
    }
    ResourceUrl style = ResourceUrl.parse(str);
    if (style == null || style.type != ResourceType.STRING || style.framework) {
        return str;
    }
    AbstractResourceRepository resources = client.getProjectResources(project, true);
    if (resources == null) {
        return str;
    }
    List<ResourceItem> items = resources.getResourceItem(ResourceType.STRING, style.name);
    if (items == null || items.isEmpty()) {
        return str;
    }
    ResourceValue resourceValue = items.get(0).getResourceValue(false);
    if (resourceValue == null) {
        return str;
    }
    return resourceValue.getValue() == null ? str : resourceValue.getValue();
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:26,代码来源:AppIndexingApiDetector.java


示例6: isAlreadyWarnedDrawableFile

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
/**
 * Returns true if this attribute is in a drawable document with one of the
 * root tags that require API 21
 */
private static boolean isAlreadyWarnedDrawableFile(@NonNull XmlContext context,
        @NonNull Attr attribute, int attributeApiLevel) {
    // Don't complain if it's in a drawable file where we've already
    // flagged the root drawable type as being unsupported
    if (context.getResourceFolderType() == ResourceFolderType.DRAWABLE
            && attributeApiLevel == 21) {
        String root = attribute.getOwnerDocument().getDocumentElement().getTagName();
        if (TAG_RIPPLE.equals(root)
                || TAG_VECTOR.equals(root)
                || TAG_ANIMATED_VECTOR.equals(root)
                || TAG_ANIMATED_SELECTOR.equals(root)) {
            return true;
        }
    }

    return false;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:22,代码来源:ApiDetector.java


示例7: checkElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
/** Checks whether the given element is the given tag, and if so, whether it satisfied
 * the minimum version that the given tag is supported in */
private void checkElement(@NonNull XmlContext context, @NonNull Element element,
        @NonNull String tag, int api, @NonNull Issue issue) {
    if (tag.equals(element.getTagName())) {
        int minSdk = getMinSdk(context);
        if (api > minSdk && api > context.getFolderVersion()
                && api > getLocalMinSdk(element)) {
            Location location = context.getLocation(element);
            String message;
            if (issue == UNSUPPORTED) {
                message = String.format(
                        "`<%1$s>` requires API level %2$d (current min is %3$d)", tag, api,
                        minSdk);
            } else {
                assert issue == UNUSED : issue;
                message = String.format(
                        "`<%1$s>` is only used in API level %2$d and higher "
                                + "(current min is %3$d)", tag, api, minSdk);
            }
            context.report(issue, element, location, message);
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:25,代码来源:ApiDetector.java


示例8: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    // NOTE: This should NOT be checking *minSdkVersion*, but *targetSdkVersion*
    // or even buildTarget instead. However, there's a risk that this will flag
    // way too much and make the rule annoying until API 17 support becomes
    // more widespread, so for now limit the check to those projects *really*
    // working with 17.  When API 17 reaches a certain amount of adoption, change
    // this to flag all apps supporting 17, including those supporting earlier
    // versions as well.
    if (context.getMainProject().getMinSdk() < 17) {
        return;
    }

    if (mTextFields == null) {
        mTextFields = new ArrayList<Element>();
    }
    mTextFields.add(element);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:19,代码来源:LabelForDetector.java


示例9: checkRepeatedWords

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
private static void checkRepeatedWords(XmlContext context, Element element, Node node,
        String text, int lastWordBegin, int lastWordEnd, int begin, int end) {
    if (lastWordBegin != -1 && end - begin == lastWordEnd - lastWordBegin
            && end - begin > 1) {
        // See whether we have a repeated word
        boolean different = false;
        for (int i = lastWordBegin, j = begin; i < lastWordEnd; i++, j++) {
            if (text.charAt(i) != text.charAt(j)) {
                different = true;
                break;
            }
        }
        if (!different && onlySpace(text, lastWordEnd, begin) && isTranslatable(element)) {
            reportRepeatedWord(context, node, text, lastWordBegin, begin, end);
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:18,代码来源:TypoDetector.java


示例10: testLineEndings

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
public void testLineEndings() throws Exception {
    // Test for http://code.google.com/p/android/issues/detail?id=22925
    String xml =
            "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
            "<LinearLayout>\r\n" +
            "\r" +
            "<LinearLayout></LinearLayout>\r\n" +
            "</LinearLayout>\r\n";
    LintCliXmlParser parser = new LintCliXmlParser();
    File file = File.createTempFile("parsertest2", ".xml");
    //noinspection IOResourceOpenedButNotSafelyClosed
    Writer fw = new BufferedWriter(new FileWriter(file));
    fw.write(xml);
    fw.close();
    LintClient client = new TestClient();
    LintDriver driver = new LintDriver(new BuiltinIssueRegistry(), client);
    Project project = Project.create(client, file.getParentFile(), file.getParentFile());
    XmlContext context = new XmlContext(driver, project, null, file, null, parser);
    Document document = parser.parseXml(context);
    assertNotNull(document);

    //noinspection ResultOfMethodCallIgnored
    file.delete();
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:25,代码来源:LintCliXmlParserTest.java


示例11: visitAttribute

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) {
    Project mainProject = context.getMainProject();
    if (mainProject.isGradleProject()) {
        Boolean appCompat = mainProject.dependsOn("com.android.support:appcompat-v7");
        if (ANDROID_URI.equals(attribute.getNamespaceURI())) {
            if (context.getFolderVersion() >= 14) {
                return;
            }
            if (appCompat == Boolean.TRUE) {
                context.report(ISSUE, attribute,
                    context.getLocation(attribute),
                    "Should use `app:showAsAction` with the appcompat library with "
                            + "`xmlns:app=\"http://schemas.android.com/apk/res-auto\"`");
            }
        } else {
            if (appCompat == Boolean.FALSE) {
                context.report(ISSUE, attribute,
                    context.getLocation(attribute),
                    "Should use `android:showAsAction` when not using the appcompat library");
            }
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:25,代码来源:AppCompatResourceDetector.java


示例12: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    String fqcn = getFqcn(context, element);
    String tag = element.getTagName();
    String frameworkClass = tagToClass(tag);
    if (frameworkClass != null) {
        String signature = ClassContext.getInternalName(fqcn);
        if (mManifestRegistrations == null) {
            mManifestRegistrations = ArrayListMultimap.create(4, 8);
        }
        mManifestRegistrations.put(frameworkClass, signature);
        if (signature.indexOf('$') != -1) {
            // The internal name contains a $ which means it's an inner class.
            // The conversion from fqcn to internal name is a bit ambiguous:
            // "a.b.C.D" usually means "inner class D in class C in package a.b".
            // However, it can (see issue 31592) also mean class D in package "a.b.C".
            // Place *both* of these possibilities in the registered map, since this
            // is only used to check that an activity is registered, not the other way
            // (so it's okay to have entries there that do not correspond to real classes).
            signature = signature.replace('$', '/');
            mManifestRegistrations.put(frameworkClass, signature);
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:25,代码来源:RegistrationDetector.java


示例13: beforeCheckFile

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void beforeCheckFile(@NonNull Context context) {
    if (mPrefix != null && context instanceof XmlContext) {
        XmlContext xmlContext = (XmlContext) context;
        ResourceFolderType folderType = xmlContext.getResourceFolderType();
        if (folderType != null && folderType != ResourceFolderType.VALUES) {
            String name = LintUtils.getBaseName(context.file.getName());
            if (!name.startsWith(mPrefix)) {
                // Attempt to report the error on the root tag of the associated
                // document to make suppressing the error with a tools:suppress
                // attribute etc possible
                if (xmlContext.document != null) {
                    Element root = xmlContext.document.getDocumentElement();
                    if (root != null) {
                        xmlContext.report(ISSUE, root, xmlContext.getLocation(root),
                                getErrorMessage(name));
                        return;
                    }
                }
                context.report(ISSUE, Location.create(context.file),
                        getErrorMessage(name));
            }
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:26,代码来源:ResourcePrefixDetector.java


示例14: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    if (mPrefix == null || context.getResourceFolderType() != ResourceFolderType.VALUES) {
        return;
    }

    for (Element item : LintUtils.getChildren(element)) {
        Attr nameAttribute = item.getAttributeNode(ATTR_NAME);
        if (nameAttribute != null) {
            String name = nameAttribute.getValue();
            if (!name.startsWith(mPrefix)) {
                String message = getErrorMessage(name);
                context.report(ISSUE, nameAttribute, context.getLocation(nameAttribute),
                        message);
            }
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:19,代码来源:ResourcePrefixDetector.java


示例15: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    if (context.getResourceFolderType() != ResourceFolderType.VALUES) {
        return;
    }

    assert element.getTagName().equals(TAG_STYLE);
    NodeList itemNodes = element.getChildNodes();
    for (int j = 0, nodeCount = itemNodes.getLength(); j < nodeCount; j++) {
        Node item = itemNodes.item(j);
        if (item.getNodeType() == Node.ELEMENT_NODE &&
                TAG_ITEM.equals(item.getNodeName())) {
            Element itemElement = (Element) item;
            NodeList childNodes = item.getChildNodes();
            for (int i = 0, n = childNodes.getLength(); i < n; i++) {
                Node child = childNodes.item(i);
                if (child.getNodeType() != Node.TEXT_NODE) {
                    return;
                }

                checkStyleItem(context, itemElement, child);
            }
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:26,代码来源:PxUsageDetector.java


示例16: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    String icon = element.getAttributeNS(ANDROID_URI, ATTR_ICON);
    if (icon != null && icon.startsWith(DRAWABLE_PREFIX)) {
        icon = icon.substring(DRAWABLE_PREFIX.length());

        String tagName = element.getTagName();
        if (tagName.equals(TAG_ITEM)) {
            if (mMenuToIcons == null) {
                mMenuToIcons = ArrayListMultimap.create();
            }
            String menu = getBaseName(context.file.getName());
            mMenuToIcons.put(menu, icon);
        } else {
            // Manifest tags: launcher icons
            if (mLauncherIcons == null) {
                mLauncherIcons = Sets.newHashSet();
            }
            mLauncherIcons.add(icon);
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:23,代码来源:IconDetector.java


示例17: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    if (element.hasAttributeNS(ANDROID_URI, ATTR_TITLE)) {
        return;
    }

    // TODO: Find out if this is necessary on older versions too.
    // I swear I saw it mentioned.
    if (context.getMainProject().getTargetSdk() < 11) {
        return;
    }

    if (VALUE_FALSE.equals(element.getAttributeNS(ANDROID_URI, ATTR_VISIBLE))) {
        return;
    }

    String message = "Menu items should specify a `title`";
    context.report(ISSUE, element, context.getLocation(element), message);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:20,代码来源:TitleDetector.java


示例18: checkGrantPermission

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
private static void checkGrantPermission(XmlContext context, Element element) {
    Attr path = element.getAttributeNodeNS(ANDROID_URI, ATTR_PATH);
    Attr prefix = element.getAttributeNodeNS(ANDROID_URI, ATTR_PATH_PREFIX);
    Attr pattern = element.getAttributeNodeNS(ANDROID_URI, ATTR_PATH_PATTERN);

    String msg = "Content provider shares everything; this is potentially dangerous.";
    if (path != null && path.getValue().equals("/")) { //$NON-NLS-1$
        context.report(OPEN_PROVIDER, path, context.getLocation(path), msg);
    }
    if (prefix != null && prefix.getValue().equals("/")) { //$NON-NLS-1$
        context.report(OPEN_PROVIDER, prefix, context.getLocation(prefix), msg);
    }
    if (pattern != null && (pattern.getValue().equals("/")  //$NON-NLS-1$
           /* || pattern.getValue().equals(".*")*/)) {
        context.report(OPEN_PROVIDER, pattern, context.getLocation(pattern), msg);
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:18,代码来源:SecurityDetector.java


示例19: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    Node parentNode = element.getParentNode();
    if (parentNode == null || parentNode.getNodeType() != Node.ELEMENT_NODE ||
            !"tech-list".equals(parentNode.getNodeName())) {
        return;
    }

    NodeList children = element.getChildNodes();
    if (children.getLength() != 1) {
        return;
    }
    Node child = children.item(0);
    if (child.getNodeType() != Node.TEXT_NODE) {
        // TODO: Warn if you have comment nodes etc too? Will probably also break inflater.
        return;
    }

    String text = child.getNodeValue();
    if (!text.equals(text.trim())) {
        String message = "There should not be any whitespace inside `<tech>` elements";
        context.report(ISSUE, element, context.getLocation(child), message);
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:25,代码来源:NfcTechListDetector.java


示例20: visitElement

import com.android.tools.lint.detector.api.XmlContext; //导入依赖的package包/类
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    if (!element.hasAttributeNS(ANDROID_URI, ATTR_CONTENT_DESCRIPTION)) {
        // Ignore views that are explicitly not important for accessibility
        if (VALUE_NO.equals(element.getAttributeNS(ANDROID_URI,
                ATTR_IMPORTANT_FOR_ACCESSIBILITY))) {
            return;
        }
        context.report(ISSUE, element, context.getLocation(element),
                "[Accessibility] Missing `contentDescription` attribute on image");
    } else {
        Attr attributeNode = element.getAttributeNodeNS(ANDROID_URI, ATTR_CONTENT_DESCRIPTION);
        String attribute = attributeNode.getValue();
        if (attribute.isEmpty() || attribute.equals("TODO")) { //$NON-NLS-1$
            context.report(ISSUE, attributeNode, context.getLocation(attributeNode),
                    "[Accessibility] Empty `contentDescription` attribute on image");
        }
    }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:20,代码来源:AccessibilityDetector.java



注:本文中的com.android.tools.lint.detector.api.XmlContext类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java Function类代码示例发布时间:2022-05-22
下一篇:
Java LogAggregationUtils类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap