blob: ece6b12c497d268ac014b3d58d418047f3b1ebad [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001-2017 the original author or authors.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
////////////////////////////////////////////////////////////////////////////////
package com.puppycrawl.tools.checkstyle.xpath;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.tree.iter.AxisIterator;
import net.sf.saxon.type.Type;
/**
* Represents attribute of the element.
*
* @author Timur Tibeyev
*/
public class AttributeNode extends AbstractNode {
/** The name of the attribute. */
private final String name;
/** The value of the attribute. */
private final String value;
/**
* Creates a new {@code AttributeNode} instance.
*
* @param name name of the attribute
* @param value value of the attribute
*/
public AttributeNode(String name, String value) {
this.name = name;
this.value = value;
}
/**
* Returns attribute value. Throws {@code UnsupportedOperationException} because attribute node
* has no attributes.
* @param namespace namespace
* @param localPart actual name of the attribute
* @return attribute value
*/
@Override
public String getAttributeValue(String namespace, String localPart) {
throw throwUnsupportedOperationException();
}
/**
* Returns local part.
* @return local part
*/
// -@cs[SimpleAccessorNameNotation] Overrides method from the base class.
// Issue: https://github.com/sevntu-checkstyle/sevntu.checkstyle/issues/166
@Override
public String getLocalPart() {
return name;
}
/**
* Returns type of the node.
* @return node kind
*/
@Override
public int getNodeKind() {
return Type.ATTRIBUTE;
}
/**
* Returns parent. Never called for attribute node, throws
* {@code UnsupportedOperationException}.
* has no attributes.
* @return parent
*/
@Override
public NodeInfo getParent() {
throw throwUnsupportedOperationException();
}
/**
* Returns root. Never called for attribute node, throws
* {@code UnsupportedOperationException}.
* @return root
*/
@Override
public NodeInfo getRoot() {
throw throwUnsupportedOperationException();
}
/**
* Returns string value.
* @return string value
*/
// -@cs[SimpleAccessorNameNotation] Overrides method from the base class.
// Issue: https://github.com/sevntu-checkstyle/sevntu.checkstyle/issues/166
@Override
public String getStringValue() {
return value;
}
/**
* Determines axis iteration algorithm. Attribute node can not be iterated, throws
* {@code UnsupportedOperationException}.
*
* @param axisNumber element from {@code AxisInfo}
* @return {@code AxisIterator} object
*/
@Override
public AxisIterator iterateAxis(byte axisNumber) {
throw throwUnsupportedOperationException();
}
/**
* Returns line number. Attribute node has no line number, throws
* {@code UnsupportedOperationException}.
* @return line number
*/
@Override
public int getLineNumber() {
throw throwUnsupportedOperationException();
}
/**
* Returns column number. Attribute node has no column number, throws
* {@code UnsupportedOperationException}.
* @return column number
*/
@Override
public int getColumnNumber() {
throw throwUnsupportedOperationException();
}
/**
* Getter method for token type. Attribute node has no token type, throws
* {@code UnsupportedOperationException}.
* @return token type
*/
@Override
public int getTokenType() {
throw throwUnsupportedOperationException();
}
/**
* Returns underlying node. Attribute node has no underlying node, throws
* {@code UnsupportedOperationException}.
* @return underlying node
*/
@Override
public DetailAST getUnderlyingNode() {
throw throwUnsupportedOperationException();
}
/**
* Returns UnsupportedOperationException exception.
* @return UnsupportedOperationException exception
*/
private static UnsupportedOperationException throwUnsupportedOperationException() {
return new UnsupportedOperationException("Operation is not supported");
}
}