ClassDescriptor cd = (ClassDescriptor) obj;
toanalyze.remove(cd);
- if (!cd.isInterface()) {
+ if (!ssjava.isSSJavaUtil(cd) && !cd.isInterface()) {
for (Iterator method_it = cd.getMethods(); method_it.hasNext();) {
MethodDescriptor md = (MethodDescriptor) method_it.next();
checkTrustworthyMethodAnnotation(md);
for (Iterator iterator = annotatedMDSet.iterator(); iterator.hasNext();) {
MethodDescriptor md = (MethodDescriptor) iterator.next();
- ssjava.addAnnotationRequire(md);
+ if (!ssjava.isTrustMethod(md)) {
+ ssjava.addAnnotationRequire(md);
+ }
}
Set<Pair> visited = new HashSet<Pair>();
if (!visited.contains(p)) {
visited.add(p);
- if (!ssjava.isTrustMethod(calleeMD)) {
+ if (!ssjava.isTrustMethod(callerMD) && !ssjava.isTrustMethod(calleeMD)) {
// if method is annotated as "TRUST", do not need to check for
// linear type & flow-down rule
tovisit.add(calleeMD);
if (isSSJavaLoop) {
throw new Error("Only outermost loop can be the self-stabilizing loop.");
} else {
+ ssjava.setMethodContainingSSJavaLoop(md);
annotatedMDSet.add(md);
isSSJavaLoop = true;
}