/* *******************************************************************
 * Copyright (c) 2010 Contributors
 * All rights reserved. 
 * This program and the accompanying materials are made available 
 * under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 *  
 * Contributors: 
 *     Andy Clement - SpringSource
 * ******************************************************************/
package org.aspectj.weaver.patterns;

import java.io.IOException;

import org.aspectj.weaver.BCException;
import org.aspectj.weaver.CompressingDataOutputStream;
import org.aspectj.weaver.ISourceContext;
import org.aspectj.weaver.VersionedDataInputStream;

Implements common functions to be used across ISignaturePatterns.
Author:Andy Clement
Since:1.6.9
/** * Implements common functions to be used across ISignaturePatterns. * * @author Andy Clement * @since 1.6.9 */
public abstract class AbstractSignaturePattern implements ISignaturePattern { protected void writePlaceholderLocation(CompressingDataOutputStream s) throws IOException { s.writeInt(0); s.writeInt(0); } public static ISignaturePattern readCompoundSignaturePattern(VersionedDataInputStream s, ISourceContext context) throws IOException { byte key = s.readByte(); switch (key) { case PATTERN: return SignaturePattern.read(s, context); case AND: return AndSignaturePattern.readAndSignaturePattern(s, context); case OR: return OrSignaturePattern.readOrSignaturePattern(s, context); case NOT: return NotSignaturePattern.readNotSignaturePattern(s, context); default: throw new BCException("unknown SignatureTypePattern kind: " + key); } } public static void writeCompoundSignaturePattern(CompressingDataOutputStream s, ISignaturePattern sigPattern) throws IOException { if (sigPattern instanceof SignaturePattern) { s.writeByte(PATTERN); ((SignaturePattern) sigPattern).write(s); } else if (sigPattern instanceof AndSignaturePattern) { AndSignaturePattern andSignaturePattern = (AndSignaturePattern) sigPattern; s.writeByte(AND); writeCompoundSignaturePattern(s, andSignaturePattern.getLeft()); writeCompoundSignaturePattern(s, andSignaturePattern.getRight()); s.writeInt(0); s.writeInt(0); // TODO positions not yet set properly } else if (sigPattern instanceof OrSignaturePattern) { OrSignaturePattern orSignaturePattern = (OrSignaturePattern) sigPattern; s.writeByte(OR); writeCompoundSignaturePattern(s, orSignaturePattern.getLeft()); writeCompoundSignaturePattern(s, orSignaturePattern.getRight()); s.writeInt(0); s.writeInt(0); // TODO positions not yet set properly } else { // negated NotSignaturePattern notSignaturePattern = (NotSignaturePattern) sigPattern; s.writeByte(NOT); writeCompoundSignaturePattern(s, notSignaturePattern.getNegated()); s.writeInt(0); s.writeInt(0); // TODO positions not yet set properly } } }