diff --git a/plugins/android/src/META-INF/plugin.xml b/plugins/android/src/META-INF/plugin.xml index 7076f17b9a47..5545106ea523 100644 --- a/plugins/android/src/META-INF/plugin.xml +++ b/plugins/android/src/META-INF/plugin.xml @@ -60,6 +60,7 @@ + diff --git a/plugins/android/src/org/jetbrains/android/AndroidCompletionContributor.java b/plugins/android/src/org/jetbrains/android/AndroidCompletionContributor.java index cacd4f3c04cf..e5941a62cab2 100644 --- a/plugins/android/src/org/jetbrains/android/AndroidCompletionContributor.java +++ b/plugins/android/src/org/jetbrains/android/AndroidCompletionContributor.java @@ -86,7 +86,7 @@ public class AndroidCompletionContributor extends CompletionContributor { } else if (AndroidDrawableDomUtil.isDrawableResourceFile(xmlFile) || ColorDomFileDescription.isColorResourceFile(xmlFile)) { - addAll(DrawableStateListDomFileDescription.getPossibleRoots(), resultSet); + addAll(AndroidDrawableDomUtil.getPossibleRoots(), resultSet); } } } diff --git a/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java b/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java index 18aebe606bcd..c2cfbc4302de 100644 --- a/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java +++ b/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java @@ -517,13 +517,13 @@ public class AndroidDomExtender extends DomExtender { registerExtensionsForXmlResources(facet, tagName, (XmlResourceElement)element, registrar, registeredSubtags); } else if (element instanceof DrawableDomElement || element instanceof ColorDomElement) { - registerExtensionsForDrawable(facet, tagName, element, registrar); + registerExtensionsForStateList(facet, tagName, element, registrar); } Collections.addAll(registeredSubtags, AndroidDomUtil.getStaticallyDefinedSubtags(element)); if (!(element instanceof LayoutElement) && !(element instanceof ColorDomElement) && - (!(element instanceof DrawableDomElement) || element instanceof UnknownDrawableElement)) { + (!(element instanceof DrawableDomElement) || element instanceof UnknownDrawableDomElement)) { Processor existingSubtagsFilter = element instanceof XmlResourceElement ? new Processor() { public boolean process(String s) { @@ -534,11 +534,11 @@ public class AndroidDomExtender extends DomExtender { } } - private static void registerExtensionsForDrawable(AndroidFacet facet, - String tagName, - AndroidDomElement element, - DomExtensionsRegistrar registrar) { - final String specialStyleableName = DrawableStateListDomFileDescription.SPECIAL_STYLEABLE_NAMES.get(tagName); + private static void registerExtensionsForStateList(AndroidFacet facet, + String tagName, + AndroidDomElement element, + DomExtensionsRegistrar registrar) { + final String specialStyleableName = AndroidDrawableDomUtil.SPECIAL_STYLEABLE_NAMES.get(tagName); if (specialStyleableName != null) { registerAttributes(facet, element, specialStyleableName, SYSTEM_RESOURCE_PACKAGE, registrar); } diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java b/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java index 05ca5c377ed7..bae6195fd595 100644 --- a/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java @@ -16,17 +16,35 @@ package org.jetbrains.android.dom.drawable; import com.intellij.psi.xml.XmlFile; +import com.intellij.util.containers.HashMap; import org.jetbrains.android.dom.AndroidResourceDomFileDescription; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + /** * @author Eugene.Kudelevsky */ public class AndroidDrawableDomUtil { + public static final Map SPECIAL_STYLEABLE_NAMES = new HashMap(); + private static final String[] POSSIBLE_DRAWABLE_ROOTS = new String[] {"selector", "bitmap", "nine-patch"}; + + static { + SPECIAL_STYLEABLE_NAMES.put("selector", "StateListDrawable"); + SPECIAL_STYLEABLE_NAMES.put("bitmap", "BitmapDrawable"); + SPECIAL_STYLEABLE_NAMES.put("nine-patch", "NinePatchDrawable"); + } + private AndroidDrawableDomUtil() { } public static boolean isDrawableResourceFile(@NotNull XmlFile file) { - return AndroidResourceDomFileDescription.doIsMyFile(file, new String[] {"drawable"}); + return AndroidResourceDomFileDescription.doIsMyFile(file, new String[]{"drawable"}); + } + + public static List getPossibleRoots() { + return Arrays.asList(POSSIBLE_DRAWABLE_ROOTS); } } diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/BitmapOrNinePatchDomFileDescription.java b/plugins/android/src/org/jetbrains/android/dom/drawable/BitmapOrNinePatchDomFileDescription.java new file mode 100644 index 000000000000..a058aa507674 --- /dev/null +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/BitmapOrNinePatchDomFileDescription.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * 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.jetbrains.android.dom.drawable; + +import com.intellij.openapi.module.Module; +import com.intellij.psi.xml.XmlFile; +import com.intellij.psi.xml.XmlTag; +import com.intellij.util.ArrayUtil; +import org.jetbrains.android.dom.AndroidResourceDomFileDescription; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author Eugene.Kudelevsky + */ +public class BitmapOrNinePatchDomFileDescription extends AndroidResourceDomFileDescription { + static final String[] ROOT_TAG_NAMES = new String[] {"bitmap", "nine-patch"}; + + public BitmapOrNinePatchDomFileDescription() { + super(BitmapOrNinePatchElement.class, ROOT_TAG_NAMES[0], "drawable"); + } + + @Override + public boolean acceptsOtherRootTagNames() { + return true; + } + + @Override + public boolean isMyFile(@NotNull XmlFile file, @Nullable Module module) { + if (!super.isMyFile(file, module)) { + return false; + } + + final XmlTag rootTag = file.getRootTag(); + if (rootTag == null) { + return false; + } + + return ArrayUtil.find(ROOT_TAG_NAMES, rootTag.getName()) >= 0; + } +} diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/BitmapOrNinePatchElement.java b/plugins/android/src/org/jetbrains/android/dom/drawable/BitmapOrNinePatchElement.java new file mode 100644 index 000000000000..b930e8a19aa8 --- /dev/null +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/BitmapOrNinePatchElement.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * 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.jetbrains.android.dom.drawable; + +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.DefinesXml; +import com.intellij.util.xml.Required; +import org.jetbrains.android.dom.AndroidAttributeValue; +import org.jetbrains.android.dom.ResourceType; +import org.jetbrains.android.dom.converters.ResourceReferenceConverter; + +/** + * @author Eugene.Kudelevsky + */ +@DefinesXml +public interface BitmapOrNinePatchElement extends DrawableDomElement { + @Required + @Convert(ResourceReferenceConverter.class) + @ResourceType("drawable") + AndroidAttributeValue getSrc(); +} diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableDomFileDescription.java b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableDomFileDescription.java index a8208f17c4b1..ccab463e38f6 100644 --- a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableDomFileDescription.java +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableDomFileDescription.java @@ -19,6 +19,7 @@ package org.jetbrains.android.dom.drawable; import com.intellij.openapi.module.Module; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; +import com.intellij.util.ArrayUtil; import org.jetbrains.android.dom.AndroidResourceDomFileDescription; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,10 +31,10 @@ import org.jetbrains.annotations.Nullable; * Time: 9:42:38 PM * To change this template use File | Settings | File Templates. */ -public class DrawableDomFileDescription extends AndroidResourceDomFileDescription { +public class DrawableDomFileDescription extends AndroidResourceDomFileDescription { public DrawableDomFileDescription() { - super(UnknownDrawableElement.class, "shape", "drawable"); + super(UnknownDrawableDomElement.class, "shape", "bitmap", "nine-patch", "drawable"); } @Override @@ -53,6 +54,7 @@ public class DrawableDomFileDescription extends AndroidResourceDomFileDescriptio } final String rootTagName = rootTag.getName(); - return !"selector".equals(rootTagName); + return !DrawableStateListDomFileDescription.SELECTOR_TAG_NAME.equals(rootTagName) && + ArrayUtil.find(BitmapOrNinePatchDomFileDescription.ROOT_TAG_NAMES, rootTag) < 0; } } diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableSelector.java b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableSelector.java index 350d2207410f..a1857618be8b 100644 --- a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableSelector.java +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableSelector.java @@ -23,6 +23,6 @@ import java.util.List; * @author Eugene.Kudelevsky */ @DefinesXml -public interface DrawableSelector extends DrawableDomElement { +public interface DrawableSelector extends DrawableStateListElement { List getItems(); } diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListDomFileDescription.java b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListDomFileDescription.java index 4048d4b2a0c7..05f7434646d3 100644 --- a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListDomFileDescription.java +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListDomFileDescription.java @@ -18,7 +18,6 @@ package org.jetbrains.android.dom.drawable; import com.intellij.openapi.module.Module; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; -import com.intellij.util.containers.HashMap; import org.jetbrains.android.dom.AndroidResourceDomFileDescription; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -26,18 +25,12 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.List; -import java.util.Map; /** * @author Eugene.Kudelevsky */ public class DrawableStateListDomFileDescription extends AndroidResourceDomFileDescription { @NonNls public static final String SELECTOR_TAG_NAME = "selector"; - public static final Map SPECIAL_STYLEABLE_NAMES = new HashMap(); - - static { - DrawableStateListDomFileDescription.SPECIAL_STYLEABLE_NAMES.put("selector", "StateListDrawable"); - } public DrawableStateListDomFileDescription() { super(DrawableSelector.class, SELECTOR_TAG_NAME, "drawable"); @@ -61,8 +54,4 @@ public class DrawableStateListDomFileDescription extends AndroidResourceDomFileD return SELECTOR_TAG_NAME.equals(rootTag.getName()); } - - public static List getPossibleRoots() { - return Arrays.asList(SELECTOR_TAG_NAME); - } } diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListElement.java b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListElement.java new file mode 100644 index 000000000000..707c378718f5 --- /dev/null +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListElement.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * 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.jetbrains.android.dom.drawable; + +/** + * Created by IntelliJ IDEA. + * User: Eugene.Kudelevsky + * Date: Aug 22, 2009 + * Time: 1:36:56 PM + * To change this template use File | Settings | File Templates. + */ +public interface DrawableStateListElement extends DrawableDomElement { +} diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListItem.java b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListItem.java index feeab917d186..a3989c8e11be 100644 --- a/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListItem.java +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/DrawableStateListItem.java @@ -25,7 +25,7 @@ import org.jetbrains.android.dom.resources.ResourceValue; /** * @author Eugene.Kudelevsky */ -public interface DrawableStateListItem extends DrawableDomElement { +public interface DrawableStateListItem extends DrawableStateListElement { @Convert(ResourceReferenceConverter.class) @ResourceType("drawable") @Required diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/UnknownDrawableElement.java b/plugins/android/src/org/jetbrains/android/dom/drawable/UnknownDrawableDomElement.java similarity index 82% rename from plugins/android/src/org/jetbrains/android/dom/drawable/UnknownDrawableElement.java rename to plugins/android/src/org/jetbrains/android/dom/drawable/UnknownDrawableDomElement.java index b9de972d9196..82eb7cb2eb8b 100644 --- a/plugins/android/src/org/jetbrains/android/dom/drawable/UnknownDrawableElement.java +++ b/plugins/android/src/org/jetbrains/android/dom/drawable/UnknownDrawableDomElement.java @@ -16,11 +16,10 @@ package org.jetbrains.android.dom.drawable; import com.intellij.util.xml.DefinesXml; -import org.jetbrains.android.dom.AndroidDomElement; /** - * @author Eugene.Kudelevksy + * @author Eugene.Kudelevsky */ @DefinesXml -public interface UnknownDrawableElement extends AndroidDomElement { +public interface UnknownDrawableDomElement extends DrawableDomElement { } diff --git a/plugins/android/testData/dom/drawable/bitmapCompletion1.xml b/plugins/android/testData/dom/drawable/bitmapCompletion1.xml new file mode 100644 index 000000000000..4fbe31bb9b17 --- /dev/null +++ b/plugins/android/testData/dom/drawable/bitmapCompletion1.xml @@ -0,0 +1,2 @@ + +/> \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/bitmapCompletion1_after.xml b/plugins/android/testData/dom/drawable/bitmapCompletion1_after.xml new file mode 100644 index 000000000000..1f78d4f6733b --- /dev/null +++ b/plugins/android/testData/dom/drawable/bitmapCompletion1_after.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/bitmapCompletion2.xml b/plugins/android/testData/dom/drawable/bitmapCompletion2.xml new file mode 100644 index 000000000000..2599952d6998 --- /dev/null +++ b/plugins/android/testData/dom/drawable/bitmapCompletion2.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/bitmapHighlighting1.xml b/plugins/android/testData/dom/drawable/bitmapHighlighting1.xml new file mode 100644 index 000000000000..f21472aeb6f3 --- /dev/null +++ b/plugins/android/testData/dom/drawable/bitmapHighlighting1.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/bitmapHighlighting2.xml b/plugins/android/testData/dom/drawable/bitmapHighlighting2.xml new file mode 100644 index 000000000000..ccb0880f5749 --- /dev/null +++ b/plugins/android/testData/dom/drawable/bitmapHighlighting2.xml @@ -0,0 +1,2 @@ + +<bitmap xmlns:android="http://schemas.android.com/apk/res/android"/> \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/ninePatchCompletion1.xml b/plugins/android/testData/dom/drawable/ninePatchCompletion1.xml new file mode 100644 index 000000000000..21846d084b82 --- /dev/null +++ b/plugins/android/testData/dom/drawable/ninePatchCompletion1.xml @@ -0,0 +1,2 @@ + +/> \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/ninePatchCompletion1_after.xml b/plugins/android/testData/dom/drawable/ninePatchCompletion1_after.xml new file mode 100644 index 000000000000..ac387d46b26b --- /dev/null +++ b/plugins/android/testData/dom/drawable/ninePatchCompletion1_after.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/ninePatchCompletion2.xml b/plugins/android/testData/dom/drawable/ninePatchCompletion2.xml new file mode 100644 index 000000000000..510bb565b7b5 --- /dev/null +++ b/plugins/android/testData/dom/drawable/ninePatchCompletion2.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/ninePatchHighlighting1.xml b/plugins/android/testData/dom/drawable/ninePatchHighlighting1.xml new file mode 100644 index 000000000000..e1e5e43016f6 --- /dev/null +++ b/plugins/android/testData/dom/drawable/ninePatchHighlighting1.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/ninePatchHighlighting2.xml b/plugins/android/testData/dom/drawable/ninePatchHighlighting2.xml new file mode 100644 index 000000000000..f2e29d48bce0 --- /dev/null +++ b/plugins/android/testData/dom/drawable/ninePatchHighlighting2.xml @@ -0,0 +1,2 @@ + +<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"/> \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/otherResource.xml b/plugins/android/testData/dom/drawable/otherResource.xml new file mode 100644 index 000000000000..98ef4fea9914 --- /dev/null +++ b/plugins/android/testData/dom/drawable/otherResource.xml @@ -0,0 +1,3 @@ + + abacaba + \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/rootTagCompletion.xml b/plugins/android/testData/dom/drawable/rootTagCompletion.xml new file mode 100644 index 000000000000..3eaa166c0ef0 --- /dev/null +++ b/plugins/android/testData/dom/drawable/rootTagCompletion.xml @@ -0,0 +1 @@ +< \ No newline at end of file diff --git a/plugins/android/testData/dom/drawable/stateListCompletion5.xml b/plugins/android/testData/dom/drawable/stateListCompletion5.xml index c15b636cc014..ab7cf8d9f8f8 100644 --- a/plugins/android/testData/dom/drawable/stateListCompletion5.xml +++ b/plugins/android/testData/dom/drawable/stateListCompletion5.xml @@ -1,3 +1,4 @@ - +> + diff --git a/plugins/android/testData/dom/drawable/stateListCompletion5_after.xml b/plugins/android/testData/dom/drawable/stateListCompletion5_after.xml index 44dfa0ab1527..72c30e9ccd9b 100644 --- a/plugins/android/testData/dom/drawable/stateListCompletion5_after.xml +++ b/plugins/android/testData/dom/drawable/stateListCompletion5_after.xml @@ -1,3 +1,4 @@ - + diff --git a/plugins/android/testData/dom/drawable/stateListCompletion6.xml b/plugins/android/testData/dom/drawable/stateListCompletion6.xml deleted file mode 100644 index ab7cf8d9f8f8..000000000000 --- a/plugins/android/testData/dom/drawable/stateListCompletion6.xml +++ /dev/null @@ -1,4 +0,0 @@ - - -> - diff --git a/plugins/android/testData/dom/drawable/stateListCompletion6_after.xml b/plugins/android/testData/dom/drawable/stateListCompletion6_after.xml deleted file mode 100644 index 72c30e9ccd9b..000000000000 --- a/plugins/android/testData/dom/drawable/stateListCompletion6_after.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java index 272fb7ac4cfe..a7a5a28f1409 100644 --- a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java +++ b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java @@ -15,6 +15,12 @@ */ package org.jetbrains.android.dom; +import com.intellij.codeInsight.completion.CompletionType; +import com.intellij.openapi.vfs.VirtualFile; + +import java.io.IOException; +import java.util.List; + /** * @author Eugene.Kudelevsky */ @@ -27,6 +33,7 @@ public class AndroidDrawableResourcesDomTest extends AndroidDomTest { public void setUp() throws Exception { super.setUp(); copyFileToProject("myDrawable.png", "res/drawable/myDrawable.png"); + copyFileToProject("otherResource.xml", "res/values/strings1.xml"); } @Override @@ -58,7 +65,52 @@ public class AndroidDrawableResourcesDomTest extends AndroidDomTest { doTestCompletion(); } - public void testStateListCompletion6() throws Throwable { + public void testBitmapHighlighting1() throws Throwable { + doTestHighlighting(); + } + + public void testBitmapHighlighting2() throws Throwable { + doTestHighlighting(); + } + + public void testBitmapCompletion1() throws Throwable { doTestCompletion(); } + + public void testBitmapCompletion2() throws Throwable { + doTestOnlyDrawableReferences(); + } + + public void testNinePatchHighlighting1() throws Throwable { + doTestHighlighting(); + } + + public void testNinePatchHighlighting2() throws Throwable { + doTestHighlighting(); + } + + public void testNinePatchCompletion1() throws Throwable { + doTestCompletion(); + } + + public void testNinePatchCompletion2() throws Throwable { + doTestOnlyDrawableReferences(); + } + + private void doTestOnlyDrawableReferences() throws IOException { + VirtualFile file = copyFileToProject(getTestName(true) + ".xml"); + myFixture.configureFromExistingVirtualFile(file); + myFixture.complete(CompletionType.BASIC); + List lookupElementStrings = myFixture.getLookupElementStrings(); + assertNotNull(lookupElementStrings); + for (String s : lookupElementStrings) { + if (!s.startsWith("@android") && !s.startsWith("@drawable")) { + fail("Variant " + s + " shouldn't be threre"); + } + } + } + + public void testRootTagCompletion() throws Throwable { + doTestCompletionVariants(getTestName(true) + ".xml", "selector", "bitmap", "nine-patch"); + } }