am 5c90c4f4: Remove kxml dependency [DO NOT MERGE]
* commit '5c90c4f459c2a7213a197f7ee98ad71e85af31bc': Remove kxml dependency [DO NOT MERGE]
This commit is contained in:
@@ -22,7 +22,6 @@ LOCAL_JAVACFLAGS := -source 6 -target 6
|
|||||||
|
|
||||||
|
|
||||||
LOCAL_JAVA_LIBRARIES := \
|
LOCAL_JAVA_LIBRARIES := \
|
||||||
kxml2-2.3.0 \
|
|
||||||
icu4j \
|
icu4j \
|
||||||
layoutlib_api-prebuilt \
|
layoutlib_api-prebuilt \
|
||||||
tools-common-prebuilt
|
tools-common-prebuilt
|
||||||
|
|||||||
@@ -25,11 +25,11 @@
|
|||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" name="icu4j" level="project" />
|
<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="layoutlib_api-prebuilt" level="project" />
|
||||||
<orderEntry type="library" name="ninepatch-prebuilt" level="project" />
|
<orderEntry type="library" name="ninepatch-prebuilt" level="project" />
|
||||||
<orderEntry type="library" name="tools-common-prebuilt" level="project" />
|
<orderEntry type="library" name="tools-common-prebuilt" level="project" />
|
||||||
<orderEntry type="library" name="framework.jar" 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="library" scope="TEST" name="guava" level="project" />
|
||||||
<orderEntry type="module-library" scope="TEST">
|
<orderEntry type="module-library" scope="TEST">
|
||||||
<library>
|
<library>
|
||||||
@@ -44,5 +44,4 @@
|
|||||||
</orderEntry>
|
</orderEntry>
|
||||||
<orderEntry type="library" scope="TEST" name="JUnit4" level="application" />
|
<orderEntry type="library" scope="TEST" name="JUnit4" level="application" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
|
|
||||||
@@ -17,9 +17,9 @@
|
|||||||
package android.util;
|
package android.util;
|
||||||
|
|
||||||
import com.android.layoutlib.bridge.impl.DelegateManager;
|
import com.android.layoutlib.bridge.impl.DelegateManager;
|
||||||
|
import com.android.layoutlib.bridge.impl.ParserFactory;
|
||||||
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
|
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
|
||||||
|
|
||||||
import org.kxml2.io.KXmlParser;
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
@@ -37,11 +37,7 @@ public class Xml_Delegate {
|
|||||||
@LayoutlibDelegate
|
@LayoutlibDelegate
|
||||||
/*package*/ static XmlPullParser newPullParser() {
|
/*package*/ static XmlPullParser newPullParser() {
|
||||||
try {
|
try {
|
||||||
KXmlParser parser = new KXmlParser();
|
return ParserFactory.instantiateParser(null);
|
||||||
// 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;
|
|
||||||
} catch (XmlPullParserException e) {
|
} catch (XmlPullParserException e) {
|
||||||
throw new AssertionError();
|
throw new AssertionError();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,10 @@
|
|||||||
package com.android.layoutlib.bridge.impl;
|
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.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
@@ -35,24 +38,35 @@ import java.io.InputStream;
|
|||||||
*/
|
*/
|
||||||
public class ParserFactory {
|
public class ParserFactory {
|
||||||
|
|
||||||
private final static String ENCODING = "UTF-8"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
public final static boolean LOG_PARSER = false;
|
public final static boolean LOG_PARSER = false;
|
||||||
|
|
||||||
public static XmlPullParser create(File f)
|
private final static String ENCODING = "UTF-8"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
// Used to get a new XmlPullParser from the client.
|
||||||
|
@Nullable
|
||||||
|
private static LayoutlibCallback sLayoutlibCallback;
|
||||||
|
|
||||||
|
public static void setLayoutlibCallback(@Nullable LayoutlibCallback callback) {
|
||||||
|
sLayoutlibCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public static XmlPullParser create(@NonNull File f)
|
||||||
throws XmlPullParserException, FileNotFoundException {
|
throws XmlPullParserException, FileNotFoundException {
|
||||||
InputStream stream = new FileInputStream(f);
|
InputStream stream = new FileInputStream(f);
|
||||||
return create(stream, f.getName(), f.length());
|
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 {
|
throws XmlPullParserException {
|
||||||
return create(stream, name, -1);
|
return create(stream, name, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static XmlPullParser create(InputStream stream, String name, long size)
|
@NonNull
|
||||||
throws XmlPullParserException {
|
private static XmlPullParser create(@NonNull InputStream stream, @Nullable String name,
|
||||||
KXmlParser parser = instantiateParser(name);
|
long size) throws XmlPullParserException {
|
||||||
|
XmlPullParser parser = instantiateParser(name);
|
||||||
|
|
||||||
stream = readAndClose(stream, name, size);
|
stream = readAndClose(stream, name, size);
|
||||||
|
|
||||||
@@ -60,19 +74,20 @@ public class ParserFactory {
|
|||||||
return parser;
|
return parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static KXmlParser instantiateParser(String name) throws XmlPullParserException {
|
@NonNull
|
||||||
KXmlParser parser;
|
public static XmlPullParser instantiateParser(@Nullable String name)
|
||||||
if (name != null) {
|
throws XmlPullParserException {
|
||||||
parser = new CustomParser(name);
|
if (sLayoutlibCallback == null) {
|
||||||
} else {
|
throw new XmlPullParserException("ParserFactory not initialized.");
|
||||||
parser = new KXmlParser();
|
|
||||||
}
|
}
|
||||||
|
XmlPullParser parser = sLayoutlibCallback.createParser(name);
|
||||||
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
|
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
|
||||||
return parser;
|
return parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static InputStream readAndClose(InputStream stream, String name, long size)
|
@NonNull
|
||||||
throws XmlPullParserException {
|
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!
|
// just a sanity check. It's doubtful we'll have such big files!
|
||||||
if (size > Integer.MAX_VALUE) {
|
if (size > Integer.MAX_VALUE) {
|
||||||
throw new XmlPullParserException("File " + name + " is too big to be parsed");
|
throw new XmlPullParserException("File " + name + " is too big to be parsed");
|
||||||
@@ -121,22 +136,8 @@ public class ParserFactory {
|
|||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
bufferedStream.close();
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ import android.view.inputmethod.InputMethodManager_Accessor;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
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_LOCK_INTERRUPTED;
|
||||||
import static com.android.ide.common.rendering.api.Result.Status.ERROR_TIMEOUT;
|
import static com.android.ide.common.rendering.api.Result.Status.ERROR_TIMEOUT;
|
||||||
import static com.android.ide.common.rendering.api.Result.Status.SUCCESS;
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setup the ParserFactory
|
||||||
|
ParserFactory.setLayoutlibCallback(mParams.getLayoutlibCallback());
|
||||||
|
|
||||||
HardwareConfig hardwareConfig = mParams.getHardwareConfig();
|
HardwareConfig hardwareConfig = mParams.getHardwareConfig();
|
||||||
|
|
||||||
// setup the display Metrics.
|
// setup the display Metrics.
|
||||||
@@ -271,6 +276,7 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso
|
|||||||
mContext.getRenderResources().setFrameworkResourceIdProvider(null);
|
mContext.getRenderResources().setFrameworkResourceIdProvider(null);
|
||||||
mContext.getRenderResources().setLogger(null);
|
mContext.getRenderResources().setLogger(null);
|
||||||
}
|
}
|
||||||
|
ParserFactory.setLayoutlibCallback(null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,14 +16,35 @@
|
|||||||
|
|
||||||
package com.android.layoutlib.bridge.android;
|
package com.android.layoutlib.bridge.android;
|
||||||
|
|
||||||
|
import com.android.annotations.NonNull;
|
||||||
|
import com.android.ide.common.rendering.api.ActionBarCallback;
|
||||||
|
import com.android.ide.common.rendering.api.AdapterBinding;
|
||||||
|
import com.android.ide.common.rendering.api.ILayoutPullParser;
|
||||||
|
import com.android.ide.common.rendering.api.LayoutlibCallback;
|
||||||
|
import com.android.ide.common.rendering.api.ResourceReference;
|
||||||
|
import com.android.ide.common.rendering.api.ResourceValue;
|
||||||
import com.android.layoutlib.bridge.impl.ParserFactory;
|
import com.android.layoutlib.bridge.impl.ParserFactory;
|
||||||
|
import com.android.resources.ResourceType;
|
||||||
|
import com.android.util.Pair;
|
||||||
|
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.kxml2.io.KXmlParser;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
public class BridgeXmlBlockParserTest extends TestCase {
|
public class BridgeXmlBlockParserTest {
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public void setUp() {
|
||||||
|
ParserFactory.setLayoutlibCallback(new LayoutlibTestCallback());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testXmlBlockParser() throws Exception {
|
public void testXmlBlockParser() throws Exception {
|
||||||
|
|
||||||
XmlPullParser parser = ParserFactory.create(
|
XmlPullParser parser = ParserFactory.create(
|
||||||
@@ -65,7 +86,7 @@ public class BridgeXmlBlockParserTest extends TestCase {
|
|||||||
//------------
|
//------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quick'n'dirty debug helper that dumps an XML structure to stdout.
|
* Quick 'n' dirty debug helper that dumps an XML structure to stdout.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private void dump(Node node, String prefix) {
|
private void dump(Node node, String prefix) {
|
||||||
@@ -104,7 +125,82 @@ public class BridgeXmlBlockParserTest extends TestCase {
|
|||||||
if (n != null) {
|
if (n != null) {
|
||||||
dump(n, prefix);
|
dump(n, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public void tearDown() {
|
||||||
|
ParserFactory.setLayoutlibCallback(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class LayoutlibTestCallback extends LayoutlibCallback {
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public XmlPullParser createParser(String displayName) throws XmlPullParserException {
|
||||||
|
return new KXmlParser();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supports(int ideFeature) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object loadView(String name, Class[] constructorSignature, Object[] constructorArgs)
|
||||||
|
throws Exception {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNamespace() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public Pair<ResourceType, String> resolveResourceId(int id) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String resolveResourceId(int[] id) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getResourceId(ResourceType type, String name) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public ILayoutPullParser getParser(String layoutName) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ILayoutPullParser getParser(ResourceValue layoutResource) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getAdapterItemValue(ResourceReference adapterView, Object adapterCookie,
|
||||||
|
ResourceReference itemRef, int fullPosition, int positionPerType,
|
||||||
|
int fullParentPosition, int parentPositionPerType, ResourceReference viewRef,
|
||||||
|
ViewAttribute viewAttribute, Object defaultValue) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdapterBinding getAdapterBinding(ResourceReference adapterViewRef,
|
||||||
|
Object adapterCookie,
|
||||||
|
Object viewObject) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionBarCallback getActionBarCallback() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
package com.android.layoutlib.bridge.intensive.setup;
|
package com.android.layoutlib.bridge.intensive.setup;
|
||||||
|
|
||||||
import com.android.SdkConstants;
|
import com.android.SdkConstants;
|
||||||
|
import com.android.annotations.NonNull;
|
||||||
|
import com.android.annotations.Nullable;
|
||||||
import com.android.ide.common.rendering.api.ActionBarCallback;
|
import com.android.ide.common.rendering.api.ActionBarCallback;
|
||||||
import com.android.ide.common.rendering.api.AdapterBinding;
|
import com.android.ide.common.rendering.api.AdapterBinding;
|
||||||
import com.android.ide.common.rendering.api.ILayoutPullParser;
|
import com.android.ide.common.rendering.api.ILayoutPullParser;
|
||||||
@@ -28,6 +30,9 @@ import com.android.resources.ResourceType;
|
|||||||
import com.android.util.Pair;
|
import com.android.util.Pair;
|
||||||
import com.android.utils.ILogger;
|
import com.android.utils.ILogger;
|
||||||
|
|
||||||
|
import org.kxml2.io.KXmlParser;
|
||||||
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@@ -155,4 +160,10 @@ public class LayoutLibTestCallback extends LayoutlibCallback {
|
|||||||
public boolean supports(int ideFeature) {
|
public boolean supports(int ideFeature) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public XmlPullParser createParser(@Nullable String name) {
|
||||||
|
return new KXmlParser();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user