org.aspectj.weaver.patterns
Class WildTypePattern
java.lang.Object
org.aspectj.weaver.patterns.PatternNode
org.aspectj.weaver.patterns.TypePattern
org.aspectj.weaver.patterns.WildTypePattern
- All Implemented Interfaces:
- IHasPosition, IHasSourceLocation
public class WildTypePattern
- extends TypePattern
The PatternParser always creates WildTypePatterns for type patterns in pointcut expressions (apart from *, which is sometimes
directly turned into TypePattern.ANY). resolveBindings() tries to work out what we've really got and turn it into a type pattern
that we can use for matching. This will normally be either an ExactTypePattern or a WildTypePattern.
Here's how the process pans out for various generic and parameterized patterns: (see GenericsWildTypePatternResolvingTestCase)
Foo where Foo exists and is generic Parser creates WildTypePattern namePatterns={Foo} resolveBindings resolves Foo to RT(Foo -
raw) return ExactTypePattern(LFoo;)
Foo where Foo exists and String meets the bounds Parser creates WildTypePattern namePatterns = {Foo},
typeParameters=WTP{String} resolveBindings resolves typeParameters to ExactTypePattern(String) resolves Foo to RT(Foo) returns
ExactTypePattern(PFoo; - parameterized)
Foo where Foo exists and takes one bound Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{Str*}
resolveBindings resolves typeParameters to WTP{Str*} resolves Foo to RT(Foo) returns WildTypePattern(name = Foo, typeParameters =
WTP{Str*} isGeneric=false)
Fo* Parser creates WildTypePattern namePatterns = {Fo*}, typeParameters=WTP{String} resolveBindings resolves
typeParameters to ETP{String} returns WildTypePattern(name = Fo*, typeParameters = ETP{String} isGeneric=false)
Foo>
Foo extends Number>
Foo extends Number+>
Foo super Number>
Fields inherited from class org.aspectj.weaver.patterns.TypePattern |
AND, annotationPattern, ANY, ANY_KEY, ANY_WITH_ANNO, BINDING, DYNAMIC, ELLIPSIS, ELLIPSIS_KEY, EXACT, HAS_MEMBER, includeSubtypes, isVarArgs, NO, NO_KEY, NOT, OR, STATIC, TYPE_CATEGORY, typeParameters, WILD |
Constructor Summary |
WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim)
|
WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos)
|
WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos,
boolean isVarArg)
|
WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos,
boolean isVarArg,
TypePatternList typeParams)
|
WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos,
boolean isVarArg,
TypePatternList typeParams,
TypePattern upperBound,
TypePattern[] additionalInterfaceBounds,
TypePattern lowerBound)
|
Method Summary |
java.lang.Object |
accept(PatternNodeVisitor visitor,
java.lang.Object data)
|
protected boolean |
couldEverMatchSameTypesAs(TypePattern other)
|
boolean |
equals(java.lang.Object other)
|
NamePattern |
extractName()
|
TypePattern[] |
getAdditionalIntefaceBounds()
|
int |
getDimensions()
Used in conjunction with checks on 'isStar()' to tell you if this pattern represents '*' or '*[]' which are different ! |
TypePattern |
getLowerBound()
|
NamePattern[] |
getNamePatterns()
|
TypePattern |
getUpperBound()
|
boolean |
hasFailedResolution()
|
int |
hashCode()
|
boolean |
isArray()
|
boolean |
isStar()
|
protected boolean |
matchesExactly(ResolvedType type)
|
protected boolean |
matchesExactly(ResolvedType type,
ResolvedType annotatedType)
|
FuzzyBoolean |
matchesInstanceof(ResolvedType type)
|
boolean |
maybeExtractName(java.lang.String string)
Method maybeExtractName. |
java.lang.String |
maybeGetCleanName()
If this type pattern has no '*' or '..' in it |
java.lang.String |
maybeGetSimpleName()
If this type pattern has no '.' or '*' in it, then return a simple string
otherwise, this will return null; |
TypePattern |
parameterizeWith(java.util.Map typeVariableMap,
World w)
return a version of this type pattern in which all type variable references have been replaced by their corresponding entry
in the map. |
static TypePattern |
read(VersionedDataInputStream s,
ISourceContext context)
|
static TypePattern |
readTypePattern150(VersionedDataInputStream s,
ISourceContext context)
|
static TypePattern |
readTypePatternOldStyle(VersionedDataInputStream s,
ISourceContext context)
|
TypePattern |
resolveBindings(IScope scope,
Bindings bindings,
boolean allowBinding,
boolean requireExactType)
Need to determine if I'm really a pattern or a reference to a formal
We may wish to further optimize the case of pattern vs. |
void |
setIsVarArgs(boolean isVarArgs)
|
static char[][] |
splitNames(java.lang.String s,
boolean convertDollar)
|
java.lang.String |
toString()
|
void |
write(CompressingDataOutputStream s)
|
Methods inherited from class org.aspectj.weaver.patterns.TypePattern |
getAnnotationPattern, getExactType, getTypeParameters, isBangVoid, isEllipsis, isIncludeSubtypes, isStarAnnotation, isVarArgs, isVoid, matches, matchesStatically, matchesSubtypes, matchesSubtypes, notExactType, postRead, remapAdviceFormals, resolve, resolveExactType, setAnnotationTypePattern, setTypeParameters |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
boundscheckingoff
public static boolean boundscheckingoff
WildTypePattern
public WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim)
WildTypePattern
public WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos)
WildTypePattern
public WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos,
boolean isVarArg)
WildTypePattern
public WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos,
boolean isVarArg,
TypePatternList typeParams,
TypePattern upperBound,
TypePattern[] additionalInterfaceBounds,
TypePattern lowerBound)
WildTypePattern
public WildTypePattern(java.util.List names,
boolean includeSubtypes,
int dim,
int endPos,
boolean isVarArg,
TypePatternList typeParams)
getNamePatterns
public NamePattern[] getNamePatterns()
getUpperBound
public TypePattern getUpperBound()
getLowerBound
public TypePattern getLowerBound()
getAdditionalIntefaceBounds
public TypePattern[] getAdditionalIntefaceBounds()
setIsVarArgs
public void setIsVarArgs(boolean isVarArgs)
- Overrides:
setIsVarArgs
in class TypePattern
couldEverMatchSameTypesAs
protected boolean couldEverMatchSameTypesAs(TypePattern other)
- Overrides:
couldEverMatchSameTypesAs
in class TypePattern
splitNames
public static char[][] splitNames(java.lang.String s,
boolean convertDollar)
matchesExactly
protected boolean matchesExactly(ResolvedType type)
- Specified by:
matchesExactly
in class TypePattern
- See Also:
org.aspectj.weaver.TypePattern#matchesExactly(IType)
matchesExactly
protected boolean matchesExactly(ResolvedType type,
ResolvedType annotatedType)
- Specified by:
matchesExactly
in class TypePattern
getDimensions
public int getDimensions()
- Used in conjunction with checks on 'isStar()' to tell you if this pattern represents '*' or '*[]' which are different !
isArray
public boolean isArray()
- Overrides:
isArray
in class TypePattern
matchesInstanceof
public FuzzyBoolean matchesInstanceof(ResolvedType type)
- Specified by:
matchesInstanceof
in class TypePattern
- See Also:
org.aspectj.weaver.TypePattern#matchesInstanceof(IType)
extractName
public NamePattern extractName()
maybeExtractName
public boolean maybeExtractName(java.lang.String string)
- Method maybeExtractName.
- Parameters:
string
-
- Returns:
- boolean
maybeGetSimpleName
public java.lang.String maybeGetSimpleName()
- If this type pattern has no '.' or '*' in it, then return a simple string
otherwise, this will return null;
maybeGetCleanName
public java.lang.String maybeGetCleanName()
- If this type pattern has no '*' or '..' in it
parameterizeWith
public TypePattern parameterizeWith(java.util.Map typeVariableMap,
World w)
- Description copied from class:
TypePattern
- return a version of this type pattern in which all type variable references have been replaced by their corresponding entry
in the map.
- Specified by:
parameterizeWith
in class TypePattern
resolveBindings
public TypePattern resolveBindings(IScope scope,
Bindings bindings,
boolean allowBinding,
boolean requireExactType)
- Need to determine if I'm really a pattern or a reference to a formal
We may wish to further optimize the case of pattern vs. non-pattern
We will be replaced by what we return
- Overrides:
resolveBindings
in class TypePattern
isStar
public boolean isStar()
- Overrides:
isStar
in class TypePattern
toString
public java.lang.String toString()
- Overrides:
toString
in class java.lang.Object
equals
public boolean equals(java.lang.Object other)
- Overrides:
equals
in class java.lang.Object
hashCode
public int hashCode()
- Overrides:
hashCode
in class java.lang.Object
write
public void write(CompressingDataOutputStream s)
throws java.io.IOException
- Specified by:
write
in class PatternNode
- Throws:
java.io.IOException
read
public static TypePattern read(VersionedDataInputStream s,
ISourceContext context)
throws java.io.IOException
- Throws:
java.io.IOException
readTypePattern150
public static TypePattern readTypePattern150(VersionedDataInputStream s,
ISourceContext context)
throws java.io.IOException
- Throws:
java.io.IOException
readTypePatternOldStyle
public static TypePattern readTypePatternOldStyle(VersionedDataInputStream s,
ISourceContext context)
throws java.io.IOException
- Throws:
java.io.IOException
accept
public java.lang.Object accept(PatternNodeVisitor visitor,
java.lang.Object data)
- Specified by:
accept
in class PatternNode
hasFailedResolution
public boolean hasFailedResolution()
- Overrides:
hasFailedResolution
in class TypePattern