private void checkStaticChain(Modifiers modifiers) { if (!modifiers.isStatic()) return; Node p = modifiers.getParent(); while (p != null) { if (p instanceof CompilationUnit) return; if (p instanceof TypeDeclaration) { Modifiers pMods = ((TypeDeclaration)p).astModifiers(); if (!pMods.isStatic()) { modifiers.getParent().addMessage(error(MODIFIERS_STATIC_CHAIN, "This declaration is (effectively) static; static declarations or only legal in top-level and static declarations.")); } } p = p.getParent(); } }
private void checkStaticChain(Modifiers modifiers) { if (!modifiers.isStatic()) return; Node p = modifiers.getParent(); while (p != null) { if (p instanceof CompilationUnit) return; if (p instanceof TypeDeclaration) { Modifiers pMods = ((TypeDeclaration)p).astModifiers(); if (!pMods.isStatic()) { modifiers.getParent().addMessage(error(MODIFIERS_STATIC_CHAIN, "This declaration is (effectively) static; static declarations or only legal in top-level and static declarations.")); } } p = p.getParent(); } }
private void checkStaticChain(Modifiers modifiers) { if (!modifiers.isStatic()) return; Node p = modifiers.getParent(); while (p != null) { if (p instanceof CompilationUnit) return; if (p instanceof TypeDeclaration) { Modifiers pMods = ((TypeDeclaration)p).astModifiers(); if (!pMods.isStatic()) { modifiers.getParent().addMessage(error(MODIFIERS_STATIC_CHAIN, "This declaration is (effectively) static; static declarations or only legal in top-level and static declarations.")); } } p = p.getParent(); } }
public void checkStaticInitializerInNonStaticType(StaticInitializer node) { TypeDeclaration parent = node.upUpToTypeDeclaration(); if (parent != null) { if (!parent.astModifiers().isStatic()) { node.addMessage(error(INITIALIZER_STATIC_IN_NON_STATIC_TYPE, "static initializers are only allowed in top-level or static types declarations.")); } } }
public void checkStaticInitializerInNonStaticType(StaticInitializer node) { TypeDeclaration parent = node.upUpToTypeDeclaration(); if (parent != null) { if (!parent.astModifiers().isStatic()) { node.addMessage(error(INITIALIZER_STATIC_IN_NON_STATIC_TYPE, "static initializers are only allowed in top-level or static types declarations.")); } } }
public void checkStaticInitializerInNonStaticType(StaticInitializer node) { TypeDeclaration parent = node.upUpToTypeDeclaration(); if (parent != null) { if (!parent.astModifiers().isStatic()) { node.addMessage(error(INITIALIZER_STATIC_IN_NON_STATIC_TYPE, "static initializers are only allowed in top-level or static types declarations.")); } } }
public void fieldModifiersCheck(VariableDeclaration vd) { TypeDeclaration td = vd.upUpToTypeDeclaration(); if (td == null) return; //not a field. VariableDefinition def = vd.astDefinition(); if (def != null) { Modifiers m = def.astModifiers(); modifiersCheck(m, FIELD_MODIFIERS_EXCLUSIVITY, FIELD_MODIFIERS_LEGAL, "field declarations"); boolean allFieldsHaveInitializers = true; for (VariableDefinitionEntry entry : def.astVariables()) { if (entry.rawInitializer() == null) { allFieldsHaveInitializers = false; break; } } if (m.isStatic() && !m.isFinal() && !allFieldsHaveInitializers) { // Initialized static final fields, assuming the initializer expression is a compile time constant, are 'special' and // do not need to adhere to the static chain rule. However, we can't determine CTC nature without resolution. checkStaticChain(m); } } }
public void fieldModifiersCheck(VariableDeclaration vd) { TypeDeclaration td = vd.upUpToTypeDeclaration(); if (td == null) return; //not a field. VariableDefinition def = vd.astDefinition(); if (def != null) { Modifiers m = def.astModifiers(); modifiersCheck(m, FIELD_MODIFIERS_EXCLUSIVITY, FIELD_MODIFIERS_LEGAL, "field declarations"); boolean allFieldsHaveInitializers = true; for (VariableDefinitionEntry entry : def.astVariables()) { if (entry.rawInitializer() == null) { allFieldsHaveInitializers = false; break; } } if (m.isStatic() && !m.isFinal() && !allFieldsHaveInitializers) { // Initialized static final fields, assuming the initializer expression is a compile time constant, are 'special' and // do not need to adhere to the static chain rule. However, we can't determine CTC nature without resolution. checkStaticChain(m); } } }
public void fieldModifiersCheck(VariableDeclaration vd) { TypeDeclaration td = vd.upUpToTypeDeclaration(); if (td == null) return; //not a field. VariableDefinition def = vd.astDefinition(); if (def != null) { Modifiers m = def.astModifiers(); modifiersCheck(m, FIELD_MODIFIERS_EXCLUSIVITY, FIELD_MODIFIERS_LEGAL, "field declarations"); boolean allFieldsHaveInitializers = true; for (VariableDefinitionEntry entry : def.astVariables()) { if (entry.rawInitializer() == null) { allFieldsHaveInitializers = false; break; } } if (m.isStatic() && !m.isFinal() && !allFieldsHaveInitializers) { // Initialized static final fields, assuming the initializer expression is a compile time constant, are 'special' and // do not need to adhere to the static chain rule. However, we can't determine CTC nature without resolution. checkStaticChain(m); } } }