am 5c90c4f4: Remove kxml dependency [DO NOT MERGE]

* commit '5c90c4f459c2a7213a197f7ee98ad71e85af31bc':
  Remove kxml dependency [DO NOT MERGE]
This commit is contained in:
Deepanshu Gupta
2015-08-26 05:54:23 +00:00
committed by Android Git Automerger
7 changed files with 153 additions and 45 deletions

View File

@@ -22,7 +22,6 @@ LOCAL_JAVACFLAGS := -source 6 -target 6
LOCAL_JAVA_LIBRARIES := \
kxml2-2.3.0 \
icu4j \
layoutlib_api-prebuilt \
tools-common-prebuilt

View File

@@ -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>
@@ -44,5 +44,4 @@
</orderEntry>
<orderEntry type="library" scope="TEST" name="JUnit4" level="application" />
</component>
</module>
</module>

View File

@@ -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();
}

View File

@@ -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 {
private final static String ENCODING = "UTF-8"; //$NON-NLS-1$
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 {
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;
}
}
}

View File

@@ -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);
}

View File

@@ -16,14 +16,35 @@
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.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.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 {
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")
private void dump(Node node, String prefix) {
@@ -104,7 +125,82 @@ public class BridgeXmlBlockParserTest extends TestCase {
if (n != null) {
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();
}
}
}

View File

@@ -17,6 +17,8 @@
package com.android.layoutlib.bridge.intensive.setup;
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.AdapterBinding;
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.utils.ILogger;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
@@ -155,4 +160,10 @@ public class LayoutLibTestCallback extends LayoutlibCallback {
public boolean supports(int ideFeature) {
return false;
}
@NonNull
@Override
public XmlPullParser createParser(@Nullable String name) {
return new KXmlParser();
}
}