Package com.github.sommeri.less4j.core.compiler.selectors

Source Code of com.github.sommeri.less4j.core.compiler.selectors.SelectorPartComparator

package com.github.sommeri.less4j.core.compiler.selectors;

import java.util.List;

import com.github.sommeri.less4j.core.ast.ASTCssNodeType;
import com.github.sommeri.less4j.core.ast.ElementSubsequent;
import com.github.sommeri.less4j.core.ast.SelectorPart;
import com.github.sommeri.less4j.core.ast.SimpleSelector;
import com.github.sommeri.less4j.core.problems.BugHappened;
import com.github.sommeri.less4j.utils.ListsComparator.ListMemberComparator;

public class SelectorPartComparator implements ListMemberComparator<SelectorPart> {

  private final SimpleSelectorComparator simpleSelectorComparator;

  public SelectorPartComparator(SimpleSelectorComparator simpleSelectorComparator) {
    this.simpleSelectorComparator = simpleSelectorComparator;
  }

  @Override
  public boolean equals(SelectorPart first, SelectorPart second) {
    if (!prefix(first, second))
      return false;

    //this assumes that isSelectorPartPrefix thrown exception on anything that is not simple selector
    List<ElementSubsequent> firstSubsequent = ((SimpleSelector) first).getSubsequent();
    List<ElementSubsequent> secondSubsequent = ((SimpleSelector) second).getSubsequent();

    return firstSubsequent.size() == secondSubsequent.size();
  }

  @Override
  public boolean prefix(SelectorPart lookFor, SelectorPart inside) {
    validateSimpleSelector(lookFor);
    validateSimpleSelector(inside);

    return simpleSelectorComparator.prefix((SimpleSelector) lookFor, (SimpleSelector) inside);
  }

  private void validateSimpleSelector(SelectorPart selector) {
    if (selector.getType() != ASTCssNodeType.SIMPLE_SELECTOR) {
      throw new BugHappened("Unexpected selector part type " + selector.getType() + ". Anything but simple selector should have been removed from tree. ", selector);
    }
  }

  @Override
  public boolean suffix(SelectorPart lookFor, SelectorPart inside) {
    validateSimpleSelector(lookFor);
    validateSimpleSelector(inside);

    return simpleSelectorComparator.suffix((SimpleSelector) lookFor, (SimpleSelector) inside);
  }

  public SelectorPart cutSuffix(SelectorPart lookFor, SelectorPart inside) {
    validateSimpleSelector(lookFor);
    validateSimpleSelector(inside);

    SimpleSelector remainder = simpleSelectorComparator.cutSuffix((SimpleSelector) lookFor, (SimpleSelector) inside);
    return remainder;
  }

  public SelectorPart cutPrefix(SelectorPart lookFor, SelectorPart inside) {
    validateSimpleSelector(lookFor);
    validateSimpleSelector(inside);

    SimpleSelector remainder = simpleSelectorComparator.cutPrefix((SimpleSelector) lookFor, (SimpleSelector) inside);
    return remainder;
  }

  public boolean contains(SelectorPart lookFor, SelectorPart inside) {
    validateSimpleSelector(lookFor);
    validateSimpleSelector(inside);

    return simpleSelectorComparator.contains((SimpleSelector) lookFor, (SimpleSelector) inside);
  }

  public SelectorPart[] splitOn(SelectorPart lookFor, SelectorPart inside) {
    validateSimpleSelector(lookFor);
    validateSimpleSelector(inside);

    return simpleSelectorComparator.splitOn((SimpleSelector) lookFor, (SimpleSelector) inside);
  }

}
TOP

Related Classes of com.github.sommeri.less4j.core.compiler.selectors.SelectorPartComparator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.