mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-64695 android: fix red code in xsd file
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user