}
return operators;
}
private static Declaration createDeclarationForOperator(RuleBuildContext context, Pattern pattern, String expr) {
Declaration declaration = null;
int dotPos = expr.indexOf('.');
if (dotPos < 0) {
if (!isIdentifier(expr)) {
return null;
}
declaration = context.getDeclarationResolver().getDeclaration( context.getRule(), expr );
if ( declaration == null) {
if ( "this".equals( expr ) ) {
declaration = createDeclarationObject( context, "this", pattern );
} else {
declaration = new Declaration("this", pattern);
try {
if ( context.getPkg().getTypeResolver().resolveType( expr ) != null ) {
return null;
}
} catch ( ClassNotFoundException e ) {}
context.getPkg().getClassFieldAccessorStore().getReader( ((ClassObjectType) pattern.getObjectType()).getClassName(), expr, declaration );
}
}
} else {
String part1 = expr.substring(0, dotPos).trim();
String part2 = expr.substring(dotPos+1).trim();
if ( "this".equals( part1 ) ) {
declaration = createDeclarationObject(context, part2, (Pattern) context.getBuildStack().peek());
} else {
declaration = context.getDeclarationResolver().getDeclaration( context.getRule(), part1 );
// if a declaration exists, then it may be a variable direct property access
if ( declaration != null ) {
if ( declaration.isPatternDeclaration() ) {
declaration = createDeclarationObject(context, part2, declaration.getPattern());
} else {
declaration = null;
}
}
}