IDEA-64695 android: fix red code in xsd file

This commit is contained in:
Eugene Kudelevsky
2011-12-26 21:25:37 +04:00
parent a1dc6c95b0
commit 939cefd95a
3 changed files with 51 additions and 5 deletions
@@ -16,12 +16,14 @@
package org.jetbrains.android;
import com.android.sdklib.SdkConstants;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.util.CachedValue;
@@ -30,20 +32,19 @@ import com.intellij.psi.util.CachedValuesManager;
import com.intellij.psi.util.PsiModificationTracker;
import com.intellij.psi.xml.XmlFile;
import com.intellij.xml.XmlSchemaProvider;
import com.android.sdklib.SdkConstants;
import gnu.trove.THashMap;
import org.jetbrains.android.dom.manifest.ManifestDomFileDescription;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.resourceManagers.ResourceManager;
import org.jetbrains.android.dom.manifest.ManifestDomFileDescription;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.net.URL;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
/**
* Created by IntelliJ IDEA.
@@ -87,7 +88,8 @@ public class AndroidXmlSchemaProvider extends XmlSchemaProvider {
public boolean isAvailable(@NotNull final XmlFile file) {
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
public Boolean compute() {
if (ResourceManager.isInResourceSubdirectory(file, null) || ManifestDomFileDescription.isManifestFile(file)) {
if (isXmlResourceFile(file) ||
ManifestDomFileDescription.isManifestFile(file)) {
return AndroidFacet.getInstance(file) != null;
}
return false;
@@ -95,6 +97,24 @@ public class AndroidXmlSchemaProvider extends XmlSchemaProvider {
});
}
private static boolean isXmlResourceFile(XmlFile file) {
if (!ResourceManager.isInResourceSubdirectory(file, null)) {
return false;
}
final PsiDirectory parent = file.getParent();
if (parent == null) {
return false;
}
final String resType = ResourceManager.getResourceTypeByDirName(parent.getName());
if (resType == null) {
return false;
}
return !resType.equals("raw");
}
@NotNull
@Override
public Set<String> getAvailableNamespaces(@NotNull XmlFile file, @Nullable String tagName) {
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:ex="urn:some-exmaple"
targetNamespace="urn:some-exmaple"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="foo" type="ex:foo"/>
<xs:complexType name="foo">
<xs:sequence>
<xs:element name="bar" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
@@ -356,7 +356,19 @@ public class AndroidLayoutDomTest extends AndroidDomTest {
actions.get(0).invoke(getProject(), myFixture.getEditor(), myFixture.getFile());
}
}.execute();
myFixture.checkResultByFile("res/values/drawables.xml", testFolder + '/' + getTestName(true) + "_drawable_after.xml", true);
myFixture.checkResultByFile("res/values/drawables.xml", testFolder + '/' + getTestName(true) + "_drawable_after.xml", true);
}
public void testXsdFile1() throws Throwable {
final VirtualFile virtualFile = copyFileToProject("XsdFile.xsd", "res/raw/XsdFile.xsd");
myFixture.configureFromExistingVirtualFile(virtualFile);
myFixture.checkHighlighting(false, false, false);
}
public void testXsdFile2() throws Throwable {
final VirtualFile virtualFile = copyFileToProject("XsdFile.xsd", "res/assets/XsdFile.xsd");
myFixture.configureFromExistingVirtualFile(virtualFile);
myFixture.checkHighlighting(false, false, false);
}
private void copyOnClickClasses() throws IOException {