All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.lucasr.probe.internal.LayoutResourceParser.groovy Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2014 Lucas Rocha
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.lucasr.probe.internal

import com.android.annotations.NonNull

class LayoutResourceParser {
    private LayoutResourceParser() {
    }

    public static Set parse(@NonNull File layoutFile) {
        Set viewClassNames = new HashSet()

        def rootNode = new XmlParser().parse(layoutFile)
        traverseLayoutXml(rootNode, viewClassNames)

        return viewClassNames
    }

    private static void traverseLayoutXml(Node node, Set viewClassNames) {
        def name = node.name()
        if (name == "view") {
            name = node.@class
        }

        def className = resolveClassName(name)
        if (className != null) {
            viewClassNames.add(className)
        }

        node.children().each { traverseLayoutXml(it, viewClassNames) }
    }

    private static String resolveClassName(String name) {
        def className
        if (name == 'View') {
            className = "android.view.View"
        } else if (name == "merge" || name == "include" || name == "ViewStub") {
            className = null
        } else if (name.indexOf('.') == -1) {
            className = "android.widget.${name}"
        } else if (name.startsWith("android.") && name.indexOf('internal')) {
            className = null
        } else {
            className = name
        }

        return className
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy