I18N: XmlAttributeDescriptor#validateValue should return detailed description.
[idea/community.git] / xml / xml-psi-api / src / com / intellij / xml / XmlAttributeDescriptor.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2
3 package com.intellij.xml;
4
5 import com.intellij.openapi.util.NlsContexts.DetailedDescription;
6 import com.intellij.psi.PsiElement;
7 import com.intellij.psi.meta.PsiMetaData;
8 import com.intellij.psi.xml.XmlElement;
9 import com.intellij.util.ArrayFactory;
10 import org.jetbrains.annotations.NotNull;
11 import org.jetbrains.annotations.Nullable;
12
13 import java.util.Collection;
14 import java.util.Collections;
15
16 public interface XmlAttributeDescriptor extends PsiMetaData {
17   XmlAttributeDescriptor[] EMPTY = new XmlAttributeDescriptor[0];
18   ArrayFactory<XmlAttributeDescriptor> ARRAY_FACTORY = count -> count == 0 ? EMPTY : new XmlAttributeDescriptor[count];
19
20   boolean isRequired();
21   boolean isFixed();
22   boolean hasIdType();
23   boolean hasIdRefType();
24
25   @Nullable
26   String getDefaultValue();
27
28   //todo: refactor to hierarchy of value descriptor?
29   boolean isEnumerated();
30   String @Nullable [] getEnumeratedValues();
31
32   @Nullable
33   @DetailedDescription
34   String validateValue(XmlElement context, String value);
35
36   @NotNull
37   default Collection<PsiElement> getDeclarations() {
38     PsiElement declaration = getDeclaration();
39     return declaration != null ? Collections.singleton(declaration)
40                                : Collections.emptyList();
41   }
42 }