From 10f3d1b980bc391d14824df0acd23ec1e77dc279 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Thu, 15 Dec 2011 21:10:06 +0400 Subject: [PATCH] android: validation of non-reference attribute values --- .../jetbrains/android/dom/AndroidDomUtil.java | 7 ++++++- .../ResourceReferenceConverter.java | 9 +++++++-- .../dom/color/stateListHighlighting.xml | 2 +- .../dom/drawable/stateListHighlighting.xml | 2 +- plugins/android/testData/dom/layout/hl2.xml | 20 +++++++++++++++++++ .../android/testData/dom/layout/integers.xml | 3 +++ .../android/dom/AndroidLayoutDomTest.java | 5 +++++ 7 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 plugins/android/testData/dom/layout/hl2.xml create mode 100644 plugins/android/testData/dom/layout/integers.xml diff --git a/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java b/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java index 196279c8b7ba..2ef27684c52c 100644 --- a/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java +++ b/plugins/android/src/org/jetbrains/android/dom/AndroidDomUtil.java @@ -185,11 +185,16 @@ public class AndroidDomUtil { Set formats = attr.getFormats(); CompositeConverter composite = new CompositeConverter(); String[] values = attr.getValues(); + boolean containsUnsupportedFormats = false; + for (AttributeFormat format : formats) { ResolvingConverter converter = getStringConverter(format, values); if (converter != null) { composite.addConverter(converter); } + else { + containsUnsupportedFormats = true; + } } ResourceReferenceConverter resConverter = getResourceReferenceConverter(attr); if (formats.contains(AttributeFormat.Flag)) { @@ -200,7 +205,7 @@ public class AndroidDomUtil { } ResolvingConverter stringConverter = simplify(composite); if (resConverter != null) { - resConverter.setAdditionalConverter(simplify(composite)); + resConverter.setAdditionalConverter(simplify(composite), containsUnsupportedFormats); return resConverter; } return stringConverter; diff --git a/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java b/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java index 245b6e25f223..55c070b6fcd7 100644 --- a/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java +++ b/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java @@ -58,6 +58,7 @@ public class ResourceReferenceConverter extends ResolvingConverter myResourceTypes; private ResolvingConverter myAdditionalConverter; + private boolean myAdditionalConverterSoft = false; private boolean myWithPrefix = true; private boolean myWithExplicitResourceType = true; @@ -75,8 +76,9 @@ public class ResourceReferenceConverter extends ResolvingConverter additionalConverter) { + public void setAdditionalConverter(ResolvingConverter additionalConverter, boolean soft) { myAdditionalConverter = additionalConverter; + myAdditionalConverterSoft = soft; } @NotNull @@ -207,11 +209,14 @@ public class ResourceReferenceConverter extends ResolvingConverter - + <item android:state_middle="true"/> diff --git a/plugins/android/testData/dom/drawable/stateListHighlighting.xml b/plugins/android/testData/dom/drawable/stateListHighlighting.xml index da2f5046df18..1caff7ec01db 100644 --- a/plugins/android/testData/dom/drawable/stateListHighlighting.xml +++ b/plugins/android/testData/dom/drawable/stateListHighlighting.xml @@ -2,7 +2,7 @@ - + diff --git a/plugins/android/testData/dom/layout/hl2.xml b/plugins/android/testData/dom/layout/hl2.xml new file mode 100644 index 000000000000..26b4bc6d2728 --- /dev/null +++ b/plugins/android/testData/dom/layout/hl2.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/plugins/android/testData/dom/layout/integers.xml b/plugins/android/testData/dom/layout/integers.xml new file mode 100644 index 000000000000..5db353653531 --- /dev/null +++ b/plugins/android/testData/dom/layout/integers.xml @@ -0,0 +1,3 @@ + + 10 + \ No newline at end of file diff --git a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLayoutDomTest.java b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLayoutDomTest.java index ab688c5a7ece..75d73a68b32b 100644 --- a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLayoutDomTest.java +++ b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLayoutDomTest.java @@ -60,6 +60,11 @@ public class AndroidLayoutDomTest extends AndroidDomTest { doTestHighlighting("hl.xml"); } + public void testHighlighting2() throws Throwable { + copyFileToProject("integers.xml", "res/values/integers.xml"); + doTestHighlighting("hl2.xml"); + } + public void testCheckLayoutAttrs() throws Throwable { doTestHighlighting("layoutAttrs.xml"); }