/xml/impl/src/com/intellij/xml/impl/dtd/XmlElementsGroupImpl.java
https://bitbucket.org/nbargnesi/idea · Java · 106 lines · 77 code · 11 blank · 18 comment · 3 complexity · 7ae4016582de865a143fcf3023b9813d MD5 · raw file
- /*
- * Copyright 2000-2010 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 com.intellij.xml.impl.dtd;
- import com.intellij.openapi.util.NotNullLazyValue;
- import com.intellij.psi.xml.XmlContentParticle;
- import com.intellij.util.Function;
- import com.intellij.util.containers.ContainerUtil;
- import com.intellij.xml.XmlElementDescriptor;
- import com.intellij.xml.XmlElementsGroup;
- import org.jetbrains.annotations.NotNull;
- import java.util.List;
- /**
- * @author Dmitry Avdeev
- */
- public class XmlElementsGroupImpl implements XmlElementsGroup {
- private final XmlContentParticle myParticle;
- private final XmlElementsGroup myParent;
- private final NotNullLazyValue<List<XmlElementsGroup>> mySubGroups = new NotNullLazyValue<List<XmlElementsGroup>>() {
- @NotNull
- @Override
- protected List<XmlElementsGroup> compute() {
- return ContainerUtil.map(myParticle.getSubParticles(), new Function<XmlContentParticle, XmlElementsGroup>() {
- @Override
- public XmlElementsGroup fun(XmlContentParticle xmlContentParticle) {
- return new XmlElementsGroupImpl(xmlContentParticle, XmlElementsGroupImpl.this);
- }
- });
- }
- };
- public XmlElementsGroupImpl(@NotNull XmlContentParticle particle, XmlElementsGroup parent) {
- myParticle = particle;
- myParent = parent;
- }
- @Override
- public int getMinOccurs() {
- switch (myParticle.getQuantifier()) {
- case ONE_OR_MORE:
- case REQUIRED:
- return 1;
- case ZERO_OR_MORE:
- case OPTIONAL:
- return 0;
- }
- throw new AssertionError(myParticle.getQuantifier());
- }
- @Override
- public int getMaxOccurs() {
- switch (myParticle.getQuantifier()) {
- case ONE_OR_MORE:
- case ZERO_OR_MORE:
- return Integer.MAX_VALUE;
- case OPTIONAL:
- case REQUIRED:
- return 1;
- }
- throw new AssertionError(myParticle.getQuantifier());
- }
- @Override
- public Type getGroupType() {
- switch (myParticle.getType()) {
- case SEQUENCE:
- return Type.SEQUENCE;
- case CHOICE:
- return Type.CHOICE;
- case ELEMENT:
- return Type.LEAF;
- }
- throw new AssertionError(myParticle.getType());
- }
- @Override
- public XmlElementsGroup getParentGroup() {
- return myParent;
- }
- @Override
- public List<XmlElementsGroup> getSubGroups() {
- return mySubGroups.getValue();
- }
- @Override
- public XmlElementDescriptor getLeafDescriptor() {
- return myParticle.getElementDescriptor();
- }
- }