org.codehaus.groovy.ast.FieldNode.getModifiers()方法的使用及代码示例

x33g5p2x  于2022-01-19 转载在 其他  
字(12.5k)|赞(0)|评价(0)|浏览(114)

本文整理了Java中org.codehaus.groovy.ast.FieldNode.getModifiers()方法的一些代码示例,展示了FieldNode.getModifiers()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。FieldNode.getModifiers()方法的具体详情如下:
包路径:org.codehaus.groovy.ast.FieldNode
类名称:FieldNode
方法名:getModifiers

FieldNode.getModifiers介绍

暂无

代码示例

代码示例来源:origin: spockframework/spock

public static int getVisibility(FieldNode field) {
 return field.getModifiers() & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED | Opcodes.ACC_PRIVATE);
}

代码示例来源:origin: spockframework/spock

public static void setVisibility(FieldNode field, int visibility) {
 int modifiers = field.getModifiers();
 modifiers &= ~(Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED | Opcodes.ACC_PRIVATE);
 field.setModifiers(modifiers | visibility);
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static void revertVisibility(FieldNode fNode) {
  fNode.setModifiers(fNode.getModifiers() & ~ACC_PRIVATE);
}

代码示例来源:origin: org.codehaus.groovy/groovy

private void checkInterfaceFieldModifiers(FieldNode node) {
  if (!currentClass.isInterface()) return;
  if ((node.getModifiers() & (ACC_PUBLIC | ACC_STATIC | ACC_FINAL)) == 0 ||
      (node.getModifiers() & (ACC_PRIVATE | ACC_PROTECTED)) != 0) {
    addError("The " + getDescription(node) + " is not 'public static final' but is defined in " +
        getDescription(currentClass) + ".", node);
  }
}

代码示例来源:origin: org.codehaus.groovy/groovy

private void printFields(PrintWriter out, ClassNode classNode) {
  boolean isInterface = isInterfaceOrTrait(classNode);
  List<FieldNode> fields = classNode.getFields();
  if (fields == null) return;
  List<FieldNode> enumFields = new ArrayList<FieldNode>(fields.size());
  List<FieldNode> normalFields = new ArrayList<FieldNode>(fields.size());
  for (FieldNode field : fields) {
    boolean isSynthetic = (field.getModifiers() & Opcodes.ACC_SYNTHETIC) != 0;
    if (field.isEnum()) {
      enumFields.add(field);
    } else if (!isSynthetic) {
      normalFields.add(field);
    }
  }
  printEnumFields(out, enumFields);
  for (FieldNode normalField : normalFields) {
    printField(out, normalField, isInterface);
  }
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static boolean isValidFieldNodeForByteCodeAccess(FieldNode fn, ClassNode accessingNode) {
  if (fn == null) return false;
  ClassNode declaringClass = fn.getDeclaringClass();
  // same class is always allowed access
  if (Modifier.isPublic(fn.getModifiers()) || declaringClass.equals(accessingNode)) return true;
  boolean samePackages = samePackages(declaringClass.getPackageName(), accessingNode.getPackageName());
  // protected means same class or same package, or subclass
  if (Modifier.isProtected(fn.getModifiers()) && (samePackages || accessingNode.isDerivedFrom(declaringClass))) {
    return true;
  }
  if (!fn.isPrivate()) {
    // package private is the only modifier left. It means  same package is allowed, subclass not, same class is
    return samePackages;
  }
  return false;
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static FieldNode checkFieldDoesNotExist(ClassNode node, String fieldName) {
  FieldNode ret = node.getDeclaredField(fieldName);
  if (ret != null) {
    if (isPublic(ret.getModifiers()) &&
        ret.getType().redirect() == ClassHelper.boolean_TYPE) {
      return ret;
    }
    throw new RuntimeParserException("The class " + node.getName() +
        " cannot declare field '" + fieldName + "' as this" +
        " field is needed for internal groovy purposes", ret);
  }
  return null;
}

代码示例来源:origin: org.codehaus.groovy/groovy

public void visitField(FieldNode fieldNode) {
  cv.visitField(
      fieldNode.getModifiers(),
      fieldNode.getName(),
      BytecodeHelper.getTypeDescription(fieldNode.getType()),
      null, //fieldValue,  //br  all the sudden that one cannot init the field here. init is done in static initializer and instance initializer.
      null);
}

代码示例来源:origin: org.codehaus.groovy/groovy

private void checkProps(List<FieldNode> list, List<String> excludes, boolean checkPropertyTypes) {
  for (FieldNode fNode : list) {
    if (excludes != null && excludes.contains(fNode.getName())) continue;
    if ((fNode.getModifiers() & ACC_TRANSIENT) != 0) continue;
    if ((fNode.getModifiers() & ACC_FINAL) != 0) {
      addError(MY_TYPE_NAME + ": The Externalizable property (or field) '" + fNode.getName() + "' cannot be final", fNode);
    }
    ClassNode propType = fNode.getType();
    if (checkPropertyTypes && !isPrimitiveType(propType) && !implementsExternalizable(propType) && !implementsSerializable(propType)) {
      addError(MY_TYPE_NAME + ": strict type checking is enabled and the non-primitive property (or field) '" + fNode.getName() +
          "' in an Externalizable class has the type '" + propType.getName() + "' which isn't Externalizable or Serializable", fNode);
    }
  }
}

代码示例来源:origin: spockframework/spock

private static void makeSharedFieldProtectedAndVolatile(Field field) {
 AstUtil.setVisibility(field.getAst(), Opcodes.ACC_PROTECTED);
 field.getAst().setModifiers(field.getAst().getModifiers() | Opcodes.ACC_VOLATILE);
}

代码示例来源:origin: org.codehaus.groovy/groovy

@Override
public void visitClass(ClassNode node) {
  FieldNode logField = node.getField(logFieldName);
  if (logField != null && logField.getOwner().equals(node)) {
    addError("Class annotated with Log annotation cannot have log field declared", logField);
  } else if (logField != null && !Modifier.isPrivate(logField.getModifiers())) {
    addError("Class annotated with Log annotation cannot have log field declared because the field exists in the parent class: " + logField.getOwner().getName(), logField);
  } else {
    logNode = loggingStrategy.addLoggerFieldToClass(node, logFieldName, categoryName);
  }
  super.visitClass(node);
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static void visitDeprecation(AnnotatedNode node, AnnotationNode visited) {
  if (visited.getClassNode().isResolved() && visited.getClassNode().getName().equals("java.lang.Deprecated")) {
    if (node instanceof MethodNode) {
      MethodNode mn = (MethodNode) node;
      mn.setModifiers(mn.getModifiers() | Opcodes.ACC_DEPRECATED);
    } else if (node instanceof FieldNode) {
      FieldNode fn = (FieldNode) node;
      fn.setModifiers(fn.getModifiers() | Opcodes.ACC_DEPRECATED);
    } else if (node instanceof ClassNode) {
      ClassNode cn = (ClassNode) node;
      cn.setModifiers(cn.getModifiers() | Opcodes.ACC_DEPRECATED);
    }
  }
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static FieldNode createFieldCopy(ClassNode buildee, FieldNode fNode) {
  Map<String,ClassNode> genericsSpec = createGenericsSpec(fNode.getDeclaringClass());
  extractSuperClassGenerics(fNode.getType(), buildee, genericsSpec);
  ClassNode correctedType = correctToGenericsSpecRecurse(genericsSpec, fNode.getType());
  return new FieldNode(fNode.getName(), fNode.getModifiers(), correctedType, buildee, DEFAULT_INITIAL_VALUE);
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static FieldNode getMetaClassField(ClassNode node) {
  FieldNode ret = node.getDeclaredField("metaClass");
  if (ret != null) {
    ClassNode mcFieldType = ret.getType();
    if (!mcFieldType.equals(ClassHelper.METACLASS_TYPE)) {
      throw new RuntimeParserException("The class " + node.getName() +
          " cannot declare field 'metaClass' of type " + mcFieldType.getName() + " as it needs to be of " +
          "the type " + ClassHelper.METACLASS_TYPE.getName() + " for internal groovy purposes", ret);
    }
    return ret;
  }
  ClassNode current = node;
  while (current != ClassHelper.OBJECT_TYPE) {
    current = current.getSuperClass();
    if (current == null) break;
    ret = current.getDeclaredField("metaClass");
    if (ret == null) continue;
    if (isPrivate(ret.getModifiers())) continue;
    return ret;
  }
  return null;
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static void createReadExternal(ClassNode cNode, List<String> excludes, List<FieldNode> list) {
  final BlockStatement body = new BlockStatement();
  Parameter oin = param(OBJECTINPUT_TYPE, "oin");
  for (FieldNode fNode : list) {
    if (excludes != null && excludes.contains(fNode.getName())) continue;
    if ((fNode.getModifiers() & ACC_TRANSIENT) != 0) continue;
    String suffix = suffixForField(fNode);
    MethodCallExpression readObject = callX(varX(oin), "read" + suffix);
    readObject.setImplicitThis(false);
    body.addStatement(assignS(varX(fNode), suffix.equals("Object") ? castX(GenericsUtils.nonGeneric(fNode.getType()), readObject) : readObject));
  }
  addGeneratedMethod(cNode, "readExternal", ACC_PUBLIC, ClassHelper.VOID_TYPE, params(oin), ClassNode.EMPTY_ARRAY, body);
}

代码示例来源:origin: org.codehaus.groovy/groovy

private static void createWriteExternal(ClassNode cNode, List<String> excludes, List<FieldNode> list) {
  final BlockStatement body = new BlockStatement();
  Parameter out = param(OBJECTOUTPUT_TYPE, "out");
  for (FieldNode fNode : list) {
    if (excludes != null && excludes.contains(fNode.getName())) continue;
    if ((fNode.getModifiers() & ACC_TRANSIENT) != 0) continue;
    MethodCallExpression writeObject = callX(varX(out), "write" + suffixForField(fNode), varX(fNode));
    writeObject.setImplicitThis(false);
    body.addStatement(stmt(writeObject));
  }
  ClassNode[] exceptions = {make(IOException.class)};
  addGeneratedMethod(cNode, "writeExternal", ACC_PUBLIC, ClassHelper.VOID_TYPE, params(out), exceptions, body);
}

代码示例来源:origin: org.codehaus.groovy/groovy

private void addListenerToClass(SourceUnit source, ClassNode classNode) {
  if (needsPropertyChangeSupport(classNode, source)) {
    addPropertyChangeSupport(classNode);
  }
  for (PropertyNode propertyNode : classNode.getProperties()) {
    FieldNode field = propertyNode.getField();
    // look to see if per-field handlers will catch this one...
    if (hasBindableAnnotation(field)
      || ((field.getModifiers() & Opcodes.ACC_FINAL) != 0)
      || field.isStatic()
      || VetoableASTTransformation.hasVetoableAnnotation(field))
    {
      // explicitly labeled properties are already handled,
      // don't transform final properties
      // don't transform static properties
      // VetoableASTTransformation will handle both @Bindable and @Vetoable
      continue;
    }
    createListenerSetter(classNode, propertyNode);
  }
}

代码示例来源:origin: org.codehaus.groovy/groovy

/**
 * Handles the bulk of the processing, mostly delegating to other methods.
 *
 * @param nodes   the AST nodes
 * @param source  the source unit for the nodes
 */
public void visit(ASTNode[] nodes, SourceUnit source) {
  if (!(nodes[0] instanceof AnnotationNode) || !(nodes[1] instanceof AnnotatedNode)) {
    throw new RuntimeException("Internal error: wrong types: $node.class / $parent.class");
  }
  AnnotationNode node = (AnnotationNode) nodes[0];
  if (nodes[1] instanceof ClassNode) {
    addListenerToClass(source, (ClassNode) nodes[1]);
  } else {
    if ((((FieldNode)nodes[1]).getModifiers() & Opcodes.ACC_FINAL) != 0) {
      source.getErrorCollector().addErrorAndContinue(new SyntaxErrorMessage(
          new SyntaxException("@groovy.beans.Vetoable cannot annotate a final property.",
              node.getLineNumber(), node.getColumnNumber(), node.getLastLineNumber(), node.getLastColumnNumber()),
          source));
    }
    addListenerToProperty(source, node, (AnnotatedNode) nodes[1]);
  }
}

代码示例来源:origin: org.codehaus.groovy/groovy

static void visitField(ErrorCollecting xform, AnnotationNode node, FieldNode fieldNode) {
  final Expression soft = node.getMember("soft");
  final Expression init = getInitExpr(xform, fieldNode);
  String backingFieldName = "$" + fieldNode.getName();
  fieldNode.rename(backingFieldName);
  fieldNode.setModifiers(ACC_PRIVATE | (fieldNode.getModifiers() & (~(ACC_PUBLIC | ACC_PROTECTED))));
  PropertyNode pNode = fieldNode.getDeclaringClass().getProperty(backingFieldName);
  if (pNode != null) {
    fieldNode.getDeclaringClass().getProperties().remove(pNode);
  }
  if (soft instanceof ConstantExpression && ((ConstantExpression) soft).getValue().equals(true)) {
    createSoft(fieldNode, init);
  } else {
    create(fieldNode, init);
    // @Lazy not meaningful with primitive so convert to wrapper if needed
    if (ClassHelper.isPrimitiveType(fieldNode.getType())) {
      fieldNode.setType(ClassHelper.getWrapper(fieldNode.getType()));
    }
  }
}

代码示例来源:origin: org.codehaus.groovy/groovy

/**
 * Given a field node, checks if we are accessing or setting a private field from an inner class.
 */
private void checkOrMarkPrivateAccess(Expression source, FieldNode fn, boolean lhsOfAssignment) {
  ClassNode enclosingClassNode = typeCheckingContext.getEnclosingClassNode();
  ClassNode declaringClass = fn.getDeclaringClass();
  if (fn != null && Modifier.isPrivate(fn.getModifiers()) &&
      (declaringClass != enclosingClassNode || typeCheckingContext.getEnclosingClosure() != null) &&
      declaringClass.getModule() == enclosingClassNode.getModule()) {
    if (!lhsOfAssignment && enclosingClassNode.isDerivedFrom(declaringClass)) {
      // check for a public/protected getter since JavaBean getters haven't been recognised as properties
      // at this point and we don't want private field access for that case which will be handled later
      boolean isPrimBool = fn.getOriginType().equals(ClassHelper.boolean_TYPE);
      String suffix = Verifier.capitalize(fn.getName());
      MethodNode getterNode = findValidGetter(enclosingClassNode, "get" + suffix);
      if (getterNode == null && isPrimBool) {
        getterNode = findValidGetter(enclosingClassNode, "is" + suffix);
      }
      if (getterNode != null) {
        source.putNodeMetaData(StaticTypesMarker.INFERRED_TYPE, getterNode.getReturnType());
        return;
      }
    }
    StaticTypesMarker marker = lhsOfAssignment ? StaticTypesMarker.PV_FIELDS_MUTATION : StaticTypesMarker.PV_FIELDS_ACCESS;
    addPrivateFieldOrMethodAccess(source, declaringClass, marker, fn);
  }
}

相关文章