Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78af2558 authored by Deepanshu Gupta's avatar Deepanshu Gupta
Browse files

Remove kxml dependency.

Create XmlPullParser using callback provided by the client. This enables
clients to choose which XmlPullParser implementation they want.

Change-Id: I9ad97a4777820cdbe5c8fc3716f74ddec9065c70
parent 7853e137
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ LOCAL_JAVACFLAGS := -source 6 -target 6


LOCAL_JAVA_LIBRARIES := \
	kxml2-2.3.0 \
	icu4j \
	layoutlib_api-prebuilt \
	tools-common-prebuilt
+2 −3
Original line number Diff line number Diff line
@@ -25,11 +25,11 @@
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="icu4j" level="project" />
    <orderEntry type="library" name="kxml2-2.3.0" level="project" />
    <orderEntry type="library" name="layoutlib_api-prebuilt" level="project" />
    <orderEntry type="library" name="ninepatch-prebuilt" level="project" />
    <orderEntry type="library" name="tools-common-prebuilt" level="project" />
    <orderEntry type="library" name="framework.jar" level="project" />
    <orderEntry type="library" scope="TEST" name="kxml2-2.3.0" level="project" />
    <orderEntry type="library" scope="TEST" name="guava" level="project" />
    <orderEntry type="module-library" scope="TEST">
      <library>
@@ -45,4 +45,3 @@
    <orderEntry type="library" scope="TEST" name="JUnit4" level="application" />
  </component>
</module>
 No newline at end of file
+2 −6
Original line number Diff line number Diff line
@@ -17,9 +17,9 @@
package android.util;

import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.layoutlib.bridge.impl.ParserFactory;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;

import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

@@ -37,11 +37,7 @@ public class Xml_Delegate {
    @LayoutlibDelegate
    /*package*/ static XmlPullParser newPullParser() {
        try {
            KXmlParser parser = new KXmlParser();
            // The prebuilt kxml2 library with the IDE doesn't support DOCECL.
//            parser.setFeature(XmlPullParser.FEATURE_PROCESS_DOCDECL, true);
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
            return parser;
            return ParserFactory.instantiateParser(null);
        } catch (XmlPullParserException e) {
            throw new AssertionError();
        }
+31 −30
Original line number Diff line number Diff line
@@ -17,7 +17,10 @@
package com.android.layoutlib.bridge.impl;


import org.kxml2.io.KXmlParser;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.ide.common.rendering.api.LayoutlibCallback;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

@@ -35,24 +38,35 @@ import java.io.InputStream;
 */
public class ParserFactory {

    public final static boolean LOG_PARSER = false;

    private final static String ENCODING = "UTF-8"; //$NON-NLS-1$

    public final static boolean LOG_PARSER = false;
    // Used to get a new XmlPullParser from the client.
    @Nullable
    private static LayoutlibCallback sLayoutlibCallback;

    public static XmlPullParser create(File f)
    public static void setLayoutlibCallback(@Nullable LayoutlibCallback callback) {
        sLayoutlibCallback = callback;
    }

    @NonNull
    public static XmlPullParser create(@NonNull File f)
            throws XmlPullParserException, FileNotFoundException {
        InputStream stream = new FileInputStream(f);
        return create(stream, f.getName(), f.length());
    }

    public static XmlPullParser create(InputStream stream, String name)
    @NonNull
    public static XmlPullParser create(@NonNull InputStream stream, @Nullable String name)
        throws XmlPullParserException {
        return create(stream, name, -1);
    }

    private static XmlPullParser create(InputStream stream, String name, long size)
            throws XmlPullParserException {
        KXmlParser parser = instantiateParser(name);
    @NonNull
    private static XmlPullParser create(@NonNull InputStream stream, @Nullable String name,
            long size) throws XmlPullParserException {
        XmlPullParser parser = instantiateParser(name);

        stream = readAndClose(stream, name, size);

@@ -60,19 +74,20 @@ public class ParserFactory {
        return parser;
    }

    private static KXmlParser instantiateParser(String name) throws XmlPullParserException {
        KXmlParser parser;
        if (name != null) {
            parser = new CustomParser(name);
        } else {
            parser = new KXmlParser();
    @NonNull
    public static XmlPullParser instantiateParser(@Nullable String name)
            throws XmlPullParserException {
        if (sLayoutlibCallback == null) {
            throw new XmlPullParserException("ParserFactory not initialized.");
        }
        XmlPullParser parser = sLayoutlibCallback.createParser(name);
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
        return parser;
    }

    private static InputStream readAndClose(InputStream stream, String name, long size)
            throws XmlPullParserException {
    @NonNull
    private static InputStream readAndClose(@NonNull InputStream stream, @Nullable String name,
            long size) throws XmlPullParserException {
        // just a sanity check. It's doubtful we'll have such big files!
        if (size > Integer.MAX_VALUE) {
            throw new XmlPullParserException("File " + name + " is too big to be parsed");
@@ -121,22 +136,8 @@ public class ParserFactory {
        } finally {
            try {
                bufferedStream.close();
            } catch (IOException e) {
            }
        }
            } catch (IOException ignored) {
            }

    private static class CustomParser extends KXmlParser {
        private final String mName;

        CustomParser(String name) {
            super();
            mName = name;
        }

        @Override
        public String toString() {
            return mName;
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ import android.view.inputmethod.InputMethodManager_Accessor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

import javax.swing.text.html.parser.Parser;

import static com.android.ide.common.rendering.api.Result.Status.ERROR_LOCK_INTERRUPTED;
import static com.android.ide.common.rendering.api.Result.Status.ERROR_TIMEOUT;
import static com.android.ide.common.rendering.api.Result.Status.SUCCESS;
@@ -99,6 +101,9 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso
            return result;
        }

        // setup the ParserFactory
        ParserFactory.setLayoutlibCallback(mParams.getLayoutlibCallback());

        HardwareConfig hardwareConfig = mParams.getHardwareConfig();

        // setup the display Metrics.
@@ -271,6 +276,7 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso
            mContext.getRenderResources().setFrameworkResourceIdProvider(null);
            mContext.getRenderResources().setLogger(null);
        }
        ParserFactory.setLayoutlibCallback(null);

    }

Loading