@Override public boolean matches(MethodInvocationTree tree, VisitorState state) { List<VarSymbol> parameters = ASTHelpers.getSymbol(tree).getParameters(); if (parameters.size() != 3) { return false; } return ASTHelpers.isSameType( parameters.get(0).asType(), state.getTypeFromString("java.lang.String"), state) && ASTHelpers.isSameType( parameters.get(1).asType(), parameters.get(2).asType(), state); } };
private static Symbol getFinalizer(VisitorState state, ClassSymbol enclosing) { Type finalizerType = state.getTypeFromString("com.google.common.labs.base.Finalizer"); Optional<VarSymbol> finalizerField = state.getTypes().closure(enclosing.asType()).stream() .flatMap(s -> getFields(s.asElement())) .filter(s -> ASTHelpers.isSameType(finalizerType, s.asType(), state)) .findFirst(); if (finalizerField.isPresent()) { return finalizerField.get(); } return ASTHelpers.resolveExistingMethod( state, enclosing.enclClass(), state.getName("finalize"), /* argTypes= */ ImmutableList.of(), /* tyargTypes= */ ImmutableList.of()); }
return types.erasure( parameters.get( 0 ).asType() ).equals( types.erasure( symbols.classType ) ) && parameters.get( 1 ).asType().equals( symbols.stringType ) && parameters.get( 2 ).asType().equals( symbols.stringType ) && types.erasure( parameters.get( 3 ).asType() ).equals( types.erasure( symbols.classType ) ) && parameters.get( 4 ).asType() instanceof Type.ArrayType && types.erasure( ((Type.ArrayType)parameters.get( 4 ).asType()).getComponentType() ).equals( types.erasure( symbols.classType ) ) && parameters.get( 5 ).asType() instanceof Type.ArrayType && ((Type.ArrayType)parameters.get( 5 ).asType()).getComponentType().equals( symbols.objectType );
return types.erasure( parameters.get( 0 ).asType() ).equals( types.erasure( symbols.classType ) ) && parameters.get( 1 ).asType().equals( symbols.stringType ) && parameters.get( 2 ).asType().equals( symbols.stringType ) && types.erasure( parameters.get( 3 ).asType() ).equals( types.erasure( symbols.classType ) ) && parameters.get( 4 ).asType() instanceof Type.ArrayType && types.erasure( ((Type.ArrayType)parameters.get( 4 ).asType()).getComponentType() ).equals( types.erasure( symbols.classType ) ) && parameters.get( 5 ).asType() instanceof Type.ArrayType && ((Type.ArrayType)parameters.get( 5 ).asType()).getComponentType().equals( symbols.objectType );
getOperationParameterGroupDocumentation((TypeElement) processingEnv.getTypeUtils().asElement(parameterSymbol.asType()), parameterDocs, processingEnv);
String qualified = SuggestedFixes.qualifyType( state, fix, types.elemtype(getLast(sym.getParameters()).asType())); Tree toFix = !trueIsArray ? cond.getTrueExpression() : cond.getFalseExpression(); fix.prefixWith(toFix, String.format("new %s[] {", qualified)).postfixWith(toFix, "}");
@Override public void visitVarDef(JCVariableDecl tree) { TranslationContext<?> context = context(); LambdaTranslationContext ltc = (context != null && context instanceof LambdaTranslationContext)? (LambdaTranslationContext)context : null; if (ltc != null) { if (frameStack.head.tree.hasTag(LAMBDA)) { ltc.addSymbol(tree.sym, LOCAL_VAR); } // Check for type variables (including as type arguments). // If they occur within class nested in a lambda, mark for erasure Type type = tree.sym.asType(); if (inClassWithinLambda() && !types.isSameType(types.erasure(type), type)) { ltc.addSymbol(tree.sym, TYPE_VAR); } } List<Frame> prevStack = frameStack; try { if (tree.sym.owner.kind == MTH) { frameStack.head.addLocal(tree.sym); } frameStack = frameStack.prepend(new Frame(tree)); super.visitVarDef(tree); } finally { frameStack = prevStack; } }
@Override public void visitVarDef(JCVariableDecl tree) { TranslationContext<?> context = context(); LambdaTranslationContext ltc = (context != null && context instanceof LambdaTranslationContext)? (LambdaTranslationContext)context : null; if (ltc != null) { if (frameStack.head.tree.hasTag(LAMBDA)) { ltc.addSymbol(tree.sym, LOCAL_VAR); } // Check for type variables (including as type arguments). // If they occur within class nested in a lambda, mark for erasure Type type = tree.sym.asType(); if (inClassWithinLambda() && !types.isSameType(types.erasure(type), type)) { ltc.addSymbol(tree.sym, TYPE_VAR); } } List<Frame> prevStack = frameStack; try { if (tree.sym.owner.kind == MTH) { frameStack.head.addLocal(tree.sym); } frameStack = frameStack.prepend(new Frame(tree)); super.visitVarDef(tree); } finally { frameStack = prevStack; } }
private List<Param> getParams(Symbol.MethodSymbol methodSymbol) { List<Param> params = new ArrayList<>(); List<Symbol.VarSymbol> paramsSymbols = methodSymbol.getParameters(); for (int position = 0; position < paramsSymbols.size(); position++) { Symbol.VarSymbol varSymbolParam = paramsSymbols.get(position); String name = varSymbolParam.getSimpleName().toString(); TypeName type = TypeName.get(varSymbolParam.asType()); boolean isOptional = true; Mockery mockery = getAnnotation(varSymbolParam, Mockery.class); if (mockery != null) { Mockery.Behaviour behaviour = getBehaviourMockery(mockery); isOptional = behaviour.isOptional(); } params.add(new Param(name, varSymbolParam, position, type, mockery != null, isOptional)); } return params; }
private static Symbol getFinalizer(VisitorState state, ClassSymbol enclosing) { Type finalizerType = state.getTypeFromString("com.google.common.labs.base.Finalizer"); Optional<VarSymbol> finalizerField = state.getTypes().closure(enclosing.asType()).stream() .flatMap(s -> getFields(s.asElement())) .filter(s -> ASTHelpers.isSameType(finalizerType, s.asType(), state)) .findFirst(); if (finalizerField.isPresent()) { return finalizerField.get(); } return ASTHelpers.resolveExistingMethod( state, enclosing.enclClass(), state.getName("finalize"), /* argTypes= */ ImmutableList.of(), /* tyargTypes= */ ImmutableList.of()); }
private void fillArtificalParamNames(final ClassSymbol clazz) { for (Symbol s : clazz.getEnclosedElements()) { if (s instanceof MethodSymbol) { MethodSymbol ms = (MethodSymbol) s; if (ms.getParameters().isEmpty()) { continue; } Set<String> usedNames = new HashSet<String>(); for (VarSymbol vs : ms.getParameters()) { String name = JavaSourceAccessor.getINSTANCE().generateReadableParameterName(vs.asType().toString(), usedNames); vs.setName(clazz.name.table.fromString(name)); } } } }
private static boolean canBeUsedByGetChecked(MethodSymbol constructor, VisitorState state) { Type stringType = state.getSymtab().stringType; Type throwableType = state.getSymtab().throwableType; // TODO(cpovirk): Check visibility of enclosing types (assuming that it matters to getChecked). if (!constructor.getModifiers().contains(PUBLIC)) { return false; } for (VarSymbol param : constructor.getParameters()) { if (!isSameType(param.asType(), stringType, state) && !isSameType(param.asType(), throwableType, state)) { return false; } } return true; }
static ImmutableList<Parameter> createListFromVarSymbols(List<VarSymbol> varSymbols) { return Streams.mapWithIndex( varSymbols.stream(), (s, i) -> new AutoValue_Parameter( s.getSimpleName().toString(), s.asType(), (int) i, s.getSimpleName().toString(), Kind.IDENTIFIER, false)) .collect(toImmutableList()); }
@Override public boolean matches(MethodInvocationTree tree, VisitorState state) { List<VarSymbol> parameters = ASTHelpers.getSymbol(tree).getParameters(); if (parameters.size() != 3) { return false; } return ASTHelpers.isSameType( parameters.get(0).asType(), state.getTypeFromString("java.lang.String"), state) && ASTHelpers.isSameType( parameters.get(1).asType(), parameters.get(2).asType(), state); } };
case "expectMessage": if (isSubtype( getOnlyElement(symbol.getParameters()).asType(), symtab.stringType, state)) {
String qualified = SuggestedFixes.qualifyType( state, fix, types.elemtype(getLast(sym.getParameters()).asType())); Tree toFix = !trueIsArray ? cond.getTrueExpression() : cond.getFalseExpression(); fix.prefixWith(toFix, String.format("new %s[] {", qualified)).postfixWith(toFix, "}");
private static boolean canBeUsedByGetChecked(MethodSymbol constructor, VisitorState state) { Type stringType = state.getSymtab().stringType; Type throwableType = state.getSymtab().throwableType; // TODO(cpovirk): Check visibility of enclosing types (assuming that it matters to getChecked). if (!constructor.getModifiers().contains(PUBLIC)) { return false; } for (VarSymbol param : constructor.getParameters()) { if (!isSameType(param.asType(), stringType, state) && !isSameType(param.asType(), throwableType, state)) { return false; } } return true; }
static ImmutableList<Parameter> createListFromVarSymbols(List<VarSymbol> varSymbols) { return Streams.mapWithIndex( varSymbols.stream(), (s, i) -> new AutoValue_Parameter( s.getSimpleName().toString(), s.asType(), (int) i, s.getSimpleName().toString(), Kind.IDENTIFIER, false)) .collect(toImmutableList()); }