if (sym.isStatic()) { wanted = InitializationContext.STATIC; other = InitializationContext.INSTANCE;
VarSymbol symbol = ASTHelpers.getSymbol(enclosingVariable); constant = symbol.isStatic() && symbol.getModifiers().contains(Modifier.FINAL) && symbol.getKind() == ElementKind.FIELD;
.collect(Collectors.toCollection(ArrayList::new)); if (!var.isStatic()) {
@Override public Description matchSynchronized(SynchronizedTree tree, VisitorState state) { Symbol symbol = ASTHelpers.getSymbol(stripParentheses(tree.getExpression())); if (!(symbol instanceof VarSymbol)) { return NO_MATCH; } // TODO(cushon): check that the receiver doesn't contain mutable state. // Currently 'this.locks[i].mu' is accepted if 'mu' is final but 'locks' is non-final. VarSymbol varSymbol = (VarSymbol) symbol; if (varSymbol.isLocal() || varSymbol.isStatic() || (varSymbol.flags() & Flags.FINAL) != 0) { return NO_MATCH; } if (ASTHelpers.hasAnnotation(varSymbol, LazyInit.class, state)) { return NO_MATCH; } Name ownerName = varSymbol.owner.enclClass().getQualifiedName(); if (Stream.of("java.io.Writer", "java.io.Reader").anyMatch(ownerName::contentEquals)) { // These classes contain a non-final 'lock' variable available to subclasses, and we can't // make these locks final. return NO_MATCH; } return describeMatch(tree.getExpression()); } }
@Override public Description matchSynchronized(SynchronizedTree tree, VisitorState state) { Symbol lock = ASTHelpers.getSymbol(stripParentheses(tree.getExpression())); if (!(lock instanceof VarSymbol)) { return Description.NO_MATCH; } if (lock.isStatic()) { return Description.NO_MATCH; } Multimap<VarSymbol, Tree> writes = WriteVisitor.scan(tree.getBlock()); for (Entry<VarSymbol, Tree> write : writes.entries()) { if (!write.getKey().isStatic()) { continue; } state.reportMatch( buildDescription(write.getValue()).setMessage(String.format(MESSAGE, lock)).build()); } return Description.NO_MATCH; }
@Override public boolean isStatic() { return symbol.isStatic(); }
boolean isFinalUninitializedStaticField(VarSymbol sym) { return isFinalUninitializedField(sym) && sym.isStatic(); }
if (!var.sym.isStatic() && var.init != null) { getScope().fieldsWithInitializers.add((JCVariableDecl) def); || (def instanceof JCVariableDecl && ((JCVariableDecl) def).sym.isStatic()))) { || (def instanceof JCVariableDecl && ((JCVariableDecl) def).sym.isStatic())) { if (def instanceof JCVariableDecl && context.hasAnnotationType(((JCVariableDecl) def).sym, ANNOTATION_STRING_TYPE, JSweetConfig.ANNOTATION_ERASED)) {
|| getScope().interfaceScope && varDecl.sym.isStatic())); if (!(parent instanceof JCClassDecl && getScope().innerClassNotStatic && !varDecl.sym.isStatic() && !Util.isConstantOrNullField(varDecl))) { if (!globals && parent instanceof JCClassDecl && getScope().interfaceScope) { && varDecl.sym.isStatic() && varDecl.init == null) { print(" = ").print(Util.getTypeInitialValue(varDecl.sym.type));
if (fieldAccess.sym instanceof VarSymbol) { VarSymbol varSym = (VarSymbol) fieldAccess.sym; if (varSym.isStatic() && varSym.owner.isInterface() && varSym.owner != Util.getAccessedSymbol(fieldAccess.selected)) { accessSubstituted = true;
if (member instanceof JCVariableDecl) { JCVariableDecl var = (JCVariableDecl) member; if (!var.sym.isStatic() && !context.hasAnnotationType(var.sym, JSweetConfig.ANNOTATION_ERASED)) { printVariableInitialization(clazz, var);
private void printFieldInitializations() { JCClassDecl clazz = getParent(JCClassDecl.class); for (JCTree t : clazz.getMembers()) { if (t instanceof JCVariableDecl && !getScope().fieldsWithInitializers.contains(t)) { JCVariableDecl field = (JCVariableDecl) t; if (!field.sym.isStatic() && !context.hasAnnotationType(field.sym, JSweetConfig.ANNOTATION_ERASED)) { String name = getIdentifier(field.sym); if (context.getFieldNameMapping(field.sym) != null) { name = context.getFieldNameMapping(field.sym); } printIndent().print("if(").print("this.").print(name).print("===undefined) ").print("this.") .print(name).print(" = ").print(Util.getTypeInitialValue(field.type)).print(";").println(); } } } for (JCVariableDecl field : getScope().fieldsWithInitializers) { if (context.hasAnnotationType(field.sym, JSweetConfig.ANNOTATION_ERASED)) { continue; } String name = getIdentifier(field.sym); if (context.getFieldNameMapping(field.sym) != null) { name = context.getFieldNameMapping(field.sym); } printIndent().print("this.").print(name).print(" = "); if (!substituteAssignedExpression(field.type, field.init)) { print(field.init); } print(";").println(); } }
private boolean isLazyInitialized(VarSymbol var) { return var.isStatic() && context.lazyInitializedStatics.contains(var) && /* enum fields are not lazy initialized */ !(var.isEnum() && var.getEnclosingElement().equals(var.type.tsym)); }
VarSymbol variableSym = ASTHelpers.getSymbol(variableTree); if (variableSym.getKind() == ElementKind.FIELD) { return Objects.equals(variableTree.getInitializer(), prev) && variableSym.isStatic();
if (sym != null && sym.isStatic()) { return NO_MATCH;
if (sym.isStatic() && sym.getModifiers().contains(Modifier.FINAL)) { return checkImmutable(tree, state, sym, name);
@Override public Description matchVariable(VariableTree tree, VisitorState state) { if (tree.getInitializer() == null) { return NO_MATCH; } VarSymbol sym = ASTHelpers.getSymbol(tree); if (sym == null || sym.getKind() != ElementKind.FIELD) { return NO_MATCH; } String name = sym.getSimpleName().toString(); if (!(sym.isStatic() && sym.getModifiers().contains(Modifier.FINAL))) { return NO_MATCH; } if (!name.equals(Ascii.toUpperCase(name))) { return NO_MATCH; } if (!isSubtype(getType(tree), state.getTypeFromString("java.text.DateFormat"), state)) { return NO_MATCH; } SuggestedFix rename = renameVariable( tree, CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, tree.getName().toString()), state); return buildDescription(tree) .addFix(threadLocalFix(tree, state, sym, rename)) .addFix(rename) .build(); }
@Override public Description matchSynchronized(SynchronizedTree tree, VisitorState state) { Symbol symbol = ASTHelpers.getSymbol(stripParentheses(tree.getExpression())); if (!(symbol instanceof VarSymbol)) { return NO_MATCH; } // TODO(cushon): check that the receiver doesn't contain mutable state. // Currently 'this.locks[i].mu' is accepted if 'mu' is final but 'locks' is non-final. VarSymbol varSymbol = (VarSymbol) symbol; if (varSymbol.isLocal() || varSymbol.isStatic() || (varSymbol.flags() & Flags.FINAL) != 0) { return NO_MATCH; } if (ASTHelpers.hasAnnotation(varSymbol, LazyInit.class, state)) { return NO_MATCH; } Name ownerName = varSymbol.owner.enclClass().getQualifiedName(); if (Stream.of("java.io.Writer", "java.io.Reader").anyMatch(ownerName::contentEquals)) { // These classes contain a non-final 'lock' variable available to subclasses, and we can't // make these locks final. return NO_MATCH; } return describeMatch(tree.getExpression()); } }
@Override public Description matchSynchronized(SynchronizedTree tree, VisitorState state) { Symbol lock = ASTHelpers.getSymbol(stripParentheses(tree.getExpression())); if (!(lock instanceof VarSymbol)) { return Description.NO_MATCH; } if (lock.isStatic()) { return Description.NO_MATCH; } Multimap<VarSymbol, Tree> writes = WriteVisitor.scan(tree.getBlock()); for (Entry<VarSymbol, Tree> write : writes.entries()) { if (!write.getKey().isStatic()) { continue; } state.reportMatch( buildDescription(write.getValue()).setMessage(String.format(MESSAGE, lock)).build()); } return Description.NO_MATCH; }
@Override public boolean isStatic() { return symbol.isStatic(); }