WEB-63653 Angular 17: no completion for html tags inside block

GitOrigin-RevId: bf68891c14e77332e9149a37fd0fbe2a2e25a88e
This commit is contained in:
Piotr Tomiak
2023-10-31 11:39:44 +01:00
committed by intellij-monorepo-bot
parent 12d8393019
commit 1a5c7c5fc0
3 changed files with 18 additions and 15 deletions

View File

@@ -17,10 +17,9 @@ package com.intellij.psi.impl.source.html;
import com.intellij.psi.impl.source.xml.XmlDocumentImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.xml.IXmlTagElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlElementType;
import com.intellij.psi.xml.XmlTag;
import com.intellij.xml.util.XmlPsiUtil;
/**
* @author Maxim.Mossienko
@@ -36,6 +35,6 @@ public class HtmlDocumentImpl extends XmlDocumentImpl {
@Override
public XmlTag getRootTag() {
return (XmlTag)XmlPsiUtil.findElement(this, IXmlTagElementType.class::isInstance);
return PsiTreeUtil.findChildOfType(this, XmlTag.class);
}
}

View File

@@ -3,7 +3,6 @@ package com.intellij.psi.impl.source.xml;
import com.intellij.html.impl.RelaxedHtmlFromSchemaElementDescriptor;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.html.HtmlTag;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlDocument;
@@ -32,10 +31,10 @@ public final class TagNameVariantCollector {
String elementNamespace = element.getNamespacePrefix().isEmpty() ? null : element.getNamespace();
final Map<String, XmlElementDescriptor> descriptorsMap = new HashMap<>();
PsiElement context = element.getParent();
PsiElement curElement = element.getParent();
XmlTag context = element.getParentTag();
XmlTag declarationTag = context;
while(curElement instanceof XmlTag declarationTag){
while(declarationTag != null){
final String namespace = declarationTag.getNamespace();
if(!descriptorsMap.containsKey(namespace)) {
@@ -51,7 +50,7 @@ public final class TagNameVariantCollector {
}
}
}
curElement = curElement.getContext();
declarationTag = declarationTag.getParentTag();
}
final Set<XmlNSDescriptor> visited = new HashSet<>();
@@ -60,7 +59,7 @@ public final class TagNameVariantCollector {
for (final String namespace: namespaces) {
final int initialSize = variants.size();
processVariantsInNamespace(namespace, element, variants, elementDescriptor, elementNamespace, descriptorsMap, visited,
context instanceof XmlTag ? (XmlTag)context : element, extension);
context != null ? context : element, extension);
if (nsInfo != null) {
for (int i = initialSize; i < variants.size(); i++) {
XmlElementDescriptor descriptor = variants.get(i);

View File

@@ -15,6 +15,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.html.HtmlTag;
import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry;
import com.intellij.psi.impl.source.tree.Factory;
import com.intellij.psi.impl.source.tree.*;
@@ -417,7 +418,9 @@ public abstract class XmlTagDelegate {
return XmlNamespaceIndex.guessSchema(namespace, nsDecl ? null : tag.getLocalName(), version, fileLocation, file);
}
private static @Nullable PsiMetaOwner retrieveOwner(final @Nullable XmlTag tag, final @Nullable XmlFile file, final @Nullable String namespace) {
private static @Nullable PsiMetaOwner retrieveOwner(final @Nullable XmlTag tag,
final @Nullable XmlFile file,
final @Nullable String namespace) {
if (file == null) {
return namespace != null && namespace.equals(XmlUtil.getTargetSchemaNsFromTag(tag)) ? tag : null;
}
@@ -715,15 +718,15 @@ public abstract class XmlTagDelegate {
}
String @NotNull [] knownNamespaces() {
final PsiElement parentElement = myTag.getParent();
final XmlTag parentTag = myTag.getParentTag();
BidirectionalMap<String, String> map = getNamespaceMap(myTag);
Set<String> known = Collections.emptySet();
if (map != null) {
known = new HashSet<>(map.values());
}
if (parentElement instanceof XmlTag) {
if (known.isEmpty()) return ((XmlTag)parentElement).knownNamespaces();
ContainerUtil.addAll(known, ((XmlTag)parentElement).knownNamespaces());
if (parentTag != null) {
if (known.isEmpty()) return parentTag.knownNamespaces();
ContainerUtil.addAll(known, parentTag.knownNamespaces());
}
else {
XmlExtension xmlExtension = XmlExtension.getExtensionByElement(myTag);
@@ -748,7 +751,6 @@ public abstract class XmlTagDelegate {
private static @Nullable BidirectionalMap<String, String> computeNamespaceMap(@NotNull XmlTag tag) {
BidirectionalMap<String, String> map = null;
PsiElement parent = tag.getParent();
boolean hasNamespaceDeclarations = tag.hasNamespaceDeclarations();
if (hasNamespaceDeclarations) {
map = new BidirectionalMap<>();
@@ -772,6 +774,9 @@ public abstract class XmlTagDelegate {
}
}
PsiElement parent = (tag instanceof HtmlTag)
? PsiTreeUtil.getParentOfType(tag, XmlTag.class, XmlDocument.class)
: tag.getParent();
if (parent instanceof XmlDocument) {
final XmlExtension extension = XmlExtension.getExtensionByElement(parent);
if (extension != null) {