org.aspectj.weaver.patterns.PerClause Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.servicemix.bundles.aspectj
Show all versions of org.apache.servicemix.bundles.aspectj
This OSGi bundle wraps aspectjrt and aspectjweaver ${pkgVersion} jar files.
/* *******************************************************************
* Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
* 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:
* PARC initial implementation
* ******************************************************************/
package org.aspectj.weaver.patterns;
import java.io.IOException;
import org.aspectj.util.TypeSafeEnum;
import org.aspectj.weaver.*;
// PTWIMPL New kind added to this class, can be (de)serialized
public abstract class PerClause extends Pointcut {
protected ResolvedType inAspect;
public static PerClause readPerClause(VersionedDataInputStream s, ISourceContext context) throws IOException {
Kind kind = Kind.read(s);
if (kind == SINGLETON) return PerSingleton.readPerClause(s, context);
else if (kind == PERCFLOW) return PerCflow.readPerClause(s, context);
else if (kind == PEROBJECT) return PerObject.readPerClause(s, context);
else if (kind == FROMSUPER) return PerFromSuper.readPerClause(s, context);
else if (kind == PERTYPEWITHIN) return PerTypeWithin.readPerClause(s,context);
throw new BCException("unknown kind: " + kind);
}
public final Pointcut concretize1(ResolvedType inAspect, ResolvedType declaringType, IntMap bindings) {
throw new RuntimeException("unimplemented: wrong concretize");
}
public abstract PerClause concretize(ResolvedType inAspect);
public abstract PerClause.Kind getKind();
public abstract String toDeclarationString();
public static class Kind extends TypeSafeEnum {
public Kind(String name, int key) { super(name, key); }
public static Kind read(VersionedDataInputStream s) throws IOException {
int key = s.readByte();
switch(key) {
case 1: return SINGLETON;
case 2: return PERCFLOW;
case 3: return PEROBJECT;
case 4: return FROMSUPER;
case 5: return PERTYPEWITHIN;
}
throw new BCException("weird kind " + key);
}
}
public static final Kind SINGLETON = new Kind("issingleton", 1);
public static final Kind PERCFLOW = new Kind("percflow", 2);
public static final Kind PEROBJECT = new Kind("perobject", 3);
public static final Kind FROMSUPER = new Kind("fromsuper", 4);
public static final Kind PERTYPEWITHIN = new Kind("pertypewithin",5);
public static class KindAnnotationPrefix extends TypeSafeEnum {
private KindAnnotationPrefix(String name, int key) {
super(name, key);
}
public String extractPointcut(String perClause) {
int from = getName().length();
int to = perClause.length()-1;
if (!perClause.startsWith(getName())
|| !perClause.endsWith(")")
|| from > perClause.length()) {
throw new RuntimeException("cannot read perclause " + perClause);
}
return perClause.substring(from, to);
}
public static final KindAnnotationPrefix PERCFLOW = new KindAnnotationPrefix("percflow(", 1);
public static final KindAnnotationPrefix PERCFLOWBELOW = new KindAnnotationPrefix("percflowbelow(", 2);
public static final KindAnnotationPrefix PERTHIS = new KindAnnotationPrefix("perthis(", 3);
public static final KindAnnotationPrefix PERTARGET = new KindAnnotationPrefix("pertarget(", 4);
public static final KindAnnotationPrefix PERTYPEWITHIN = new KindAnnotationPrefix("pertypewithin(", 5);
}
}