mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Maven: pom.xml tags beyond <configuration> are regarded as invalid (IDEA-89560)
This commit is contained in:
+18
@@ -15,12 +15,30 @@
|
||||
*/
|
||||
package org.jetbrains.idea.maven.dom;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.impl.source.xml.XmlElementDescriptorProvider;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.util.xml.DomElement;
|
||||
import com.intellij.util.xml.impl.DomManagerImpl;
|
||||
import com.intellij.xml.XmlElementDescriptor;
|
||||
import com.intellij.xml.impl.schema.AnyXmlElementDescriptor;
|
||||
import org.jetbrains.idea.maven.dom.model.MavenDomConfiguration;
|
||||
|
||||
public class MavenDomElementDescriptorProvider implements XmlElementDescriptorProvider {
|
||||
public XmlElementDescriptor getDescriptor(XmlTag tag) {
|
||||
DomElement domElement = DomManagerImpl.getDomManager(tag.getProject()).getDomElement(tag);
|
||||
if (domElement == null) {
|
||||
PsiElement configuration =
|
||||
PsiTreeUtil.findFirstParent(tag, element -> element instanceof XmlTag && "configuration".equals(((XmlTag)element).getName()));
|
||||
if (configuration instanceof XmlTag) {
|
||||
DomElement configurationElement = DomManagerImpl.getDomManager(tag.getProject()).getDomElement((XmlTag)configuration);
|
||||
if (configurationElement instanceof MavenDomConfiguration &&
|
||||
configurationElement.getGenericInfo().getFixedChildrenDescriptions().isEmpty()) {
|
||||
return new AnyXmlElementDescriptor(null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
return MavenDomElementDescriptorHolder.getInstance(tag.getProject()).getDescriptor(tag);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2000-2017 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.idea.maven.dom;
|
||||
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.util.xml.DomElement;
|
||||
import com.intellij.util.xml.DomUtil;
|
||||
import com.intellij.util.xml.impl.DomManagerImpl;
|
||||
import com.intellij.xml.DefaultXmlExtension;
|
||||
import com.intellij.xml.XmlElementDescriptor;
|
||||
import com.intellij.xml.impl.schema.AnyXmlElementDescriptor;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.dom.model.MavenDomConfiguration;
|
||||
|
||||
/**
|
||||
* @author Vladislav.Soroka
|
||||
* @since 4/4/2017
|
||||
*/
|
||||
public class MavenXmlExtension extends DefaultXmlExtension {
|
||||
@Override
|
||||
public boolean isAvailable(PsiFile file) {
|
||||
return file instanceof XmlFile && MavenDomUtil.isMavenFile(file);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public XmlElementDescriptor getElementDescriptor(XmlTag tag, XmlTag contextTag, XmlElementDescriptor parentDescriptor) {
|
||||
DomElement domElement = DomManagerImpl.getDomManager(tag.getProject()).getDomElement(contextTag);
|
||||
if (domElement != null) {
|
||||
MavenDomConfiguration configuration = DomUtil.getParentOfType(domElement, MavenDomConfiguration.class, false);
|
||||
if (configuration != null && configuration.getGenericInfo().getFixedChildrenDescriptions().isEmpty()) {
|
||||
return new AnyXmlElementDescriptor(null, null);
|
||||
}
|
||||
}
|
||||
return super.getElementDescriptor(tag, contextTag, parentDescriptor);
|
||||
}
|
||||
}
|
||||
@@ -116,7 +116,7 @@
|
||||
<localInspection language="XML" shortName="MavenPropertyInParent" bundle="MavenDomBundle" key="inspection.property.in.parent.name"
|
||||
groupKey="inspection.group" enabledByDefault="true" level="WARNING"
|
||||
implementationClass="org.jetbrains.idea.maven.dom.inspections.MavenPropertyInParentInspection"/>
|
||||
|
||||
<xml.xmlExtension implementation="org.jetbrains.idea.maven.dom.MavenXmlExtension"/>
|
||||
<dom.extender domClass="org.jetbrains.idea.maven.dom.model.MavenDomConfiguration"
|
||||
extenderClass="org.jetbrains.idea.maven.dom.MavenPluginConfigurationDomExtender"/>
|
||||
<dom.extender domClass="org.jetbrains.idea.maven.dom.model.MavenDomConfigurationParameter"
|
||||
|
||||
Reference in New Issue
Block a user