private static boolean requiresSuperCall(Symbol.MethodSymbol methodSymbol) { Type superType = methodSymbol.owner().type().symbol().superClass(); Collection<Symbol> symbols = Lists.newArrayList(); while (superType != null && !superType.is(JUNIT_FRAMEWORK_TEST_CASE) && symbols.isEmpty()) { symbols = superType.symbol().lookupSymbols(methodSymbol.name()); superType = superType.symbol().superClass(); } return !symbols.isEmpty() && !symbols.iterator().next().owner().type().is(JUNIT_FRAMEWORK_TEST_CASE); }
private static boolean requiresSuperCall(Symbol.MethodSymbol methodSymbol) { Type superType = methodSymbol.owner().type().symbol().superClass(); Collection<Symbol> symbols = Lists.newArrayList(); while (superType != null && !superType.is(JUNIT_FRAMEWORK_TEST_CASE) && symbols.isEmpty()) { symbols = superType.symbol().lookupSymbols(methodSymbol.name()); superType = superType.symbol().superClass(); } return !symbols.isEmpty() && !symbols.iterator().next().owner().type().is(JUNIT_FRAMEWORK_TEST_CASE); }
private boolean isSearchedMethod(MethodSymbol symbol, @Nullable Type callSiteType) { boolean result = nameAcceptable(symbol) && parametersAcceptable(symbol); if (typeDefinition != null) { result &= typeDefinition.test(symbol.owner().type()); } if (callSite != null) { result &= callSiteType != null && callSite.test(callSiteType); } return result; }
private void throwTooManyTransitiveRelationsException(MethodTree tree, RelationalSymbolicValue.TransitiveRelationExceededException e) { String message = String.format("reached maximum number of transitive relations generated for method %s in class %s", tree.simpleName().name(), tree.symbol().owner().name()); MaximumStepsReachedException cause = new MaximumStepsReachedException(message, e); interrupted(cause); throw cause; }
public SymmetryBrokePatterns(Symbol.MethodSymbol methodSymbol) { this.methodSymbol = methodSymbol; this.owner = methodSymbol.owner(); }
MethodReference(Symbol.MethodSymbol symbol) { methodSymbol = symbol; methodScopeOwner = methodSymbol.owner(); if (methodScopeOwner != null && methodScopeOwner.isTypeSymbol()) { nonStaticReference = !methodScopeOwner.isStatic() && !methodScopeOwner.owner().isPackageSymbol(); } }
private static boolean isOwnedBySerializableExtensibleClass(MethodTree method) { Symbol owner = method.symbol().owner(); return !owner.isPrivate() && !owner.isFinal() && owner.type().isSubtypeOf("java.io.Serializable"); } }
private void checkExplodedGraphTooBig(ProgramState programState) { // Arbitrary formula to avoid out of memory errors if (steps + workList.size() > MAX_STEPS / 2 && programState.constraintsSize() > 75) { throw new ExplodedGraphTooBigException("Program state constraints are too big : stopping Symbolic Execution for method " + methodTree.simpleName().name() + " in class " + methodTree.symbol().owner().name()); } }
@Override public void visitNode(Tree tree) { if (hasSemantic()) { MethodTreeImpl methodTree = (MethodTreeImpl) tree; if (methodTree.isEqualsMethod() && methodTree.block() != null) { methodTree.block().accept(new SymmetryBrokePatterns(methodTree.symbol().owner())); } } }
private void throwTooManyBooleanStates(MethodTree tree, TooManyNestedBooleanStatesException e) { String message = String.format("reached maximum number of %d branched states for method %s in class %s", MAX_NESTED_BOOLEAN_STATES, tree.simpleName().name(), tree.symbol().owner().name()); MaximumStepsReachedException cause = new MaximumStepsReachedException(message, e); interrupted(cause); throw cause; }
public static boolean methodCanNotBeOverriden(Symbol.MethodSymbol methodSymbol) { if (Flags.isFlagged(((JavaSymbol.MethodJavaSymbol) methodSymbol).flags(), Flags.NATIVE)) { return false; } return !methodSymbol.isAbstract() && (methodSymbol.isPrivate() || methodSymbol.isFinal() || methodSymbol.isStatic() || methodSymbol.owner().isFinal()); } }
MethodReference(Symbol.MethodSymbol symbol) { methodSymbol = symbol; methodScopeOwner = methodSymbol.owner(); if (methodScopeOwner != null && methodScopeOwner.isTypeSymbol()) { nonStaticReference = !methodScopeOwner.isStatic() && !methodScopeOwner.owner().isPackageSymbol(); } }
private static boolean isOwnedBySerializableExtensibleClass(MethodTree method) { Symbol owner = method.symbol().owner(); return !owner.isPrivate() && !owner.isFinal() && owner.type().isSubtypeOf("java.io.Serializable"); } }
private static boolean isEnclosingClassFinal(ExpressionTree expressionTree) { if (expressionTree.is(IDENTIFIER)) { Tree parent = expressionTree.parent(); while (!parent.is(METHOD, CONSTRUCTOR)) { parent = parent.parent(); } return ((MethodTree) parent).symbol().owner().isFinal(); } return ((MemberSelectExpressionTree) expressionTree).expression().symbolType().symbol().isFinal(); } }
@Override public void visitNode(Tree tree) { MethodTree methodTree = (MethodTree) tree; if (!hasSemantic()) { return; } if (methodTree.block() != null && isHasNextMethod(methodTree)) { hasNextBodyVisitor.setHasNextOwner(methodTree.symbol().owner()); methodTree.block().accept(hasNextBodyVisitor); } }
@Override public void visitNode(Tree tree) { if (!hasSemantic()) { return; } Symbol.MethodSymbol method = ((MethodTree) tree).symbol(); if (method.isAbstract() && method.owner().isAbstract()) { checkMethod((JavaSymbol.MethodJavaSymbol) method); } }
private void checkExplodedGraphTooBig(ProgramState programState) { // Arbitrary formula to avoid out of memory errors if (steps + workList.size() > maxSteps() / 2 && programState.constraintsSize() > 75) { throw new ExplodedGraphTooBigException("Program state constraints are too big : stopping Symbolic Execution for method " + methodTree.simpleName().name() + " in class " + methodTree.symbol().owner().name()); } }
private void throwMaxSteps(MethodTree tree) { String message = String.format("reached limit of %d steps for method %s#%d in class %s", maxSteps(), tree.simpleName().name(), tree.simpleName().firstToken().line(), tree.symbol().owner().name()); MaximumStepsReachedException cause = new MaximumStepsReachedException(message); interrupted(cause); throw cause; }
@Override public void visitNode(Tree tree) { if (!hasSemantic()) { return; } MethodTree methodTree = (MethodTree) tree; methodTree.block().accept(new ConstructorBodyVisitor(methodTree.symbol().owner())); }
private void throwTooManyBooleanStates(MethodTree tree, TooManyNestedBooleanStatesException e) { String message = String.format("reached maximum number of %d branched states for method %s in class %s", MAX_NESTED_BOOLEAN_STATES, tree.simpleName().name(), tree.symbol().owner().name()); MaximumStepsReachedException cause = new MaximumStepsReachedException(message, e); interrupted(cause); throw cause; }