langtools/src/share/classes/com/sun/tools/doclint/Checker.java
changeset 20255 f8be1ea20e1a
parent 20254 8246fe4d6638
child 20256 9154c5cc0d9f
equal deleted inserted replaced
20254:8246fe4d6638 20255:f8be1ea20e1a
    42 
    42 
    43 import javax.lang.model.element.Element;
    43 import javax.lang.model.element.Element;
    44 import javax.lang.model.element.ElementKind;
    44 import javax.lang.model.element.ElementKind;
    45 import javax.lang.model.element.ExecutableElement;
    45 import javax.lang.model.element.ExecutableElement;
    46 import javax.lang.model.element.Name;
    46 import javax.lang.model.element.Name;
       
    47 import javax.lang.model.element.VariableElement;
    47 import javax.lang.model.type.TypeKind;
    48 import javax.lang.model.type.TypeKind;
    48 import javax.lang.model.type.TypeMirror;
    49 import javax.lang.model.type.TypeMirror;
    49 import javax.tools.Diagnostic.Kind;
    50 import javax.tools.Diagnostic.Kind;
    50 import javax.tools.JavaFileObject;
    51 import javax.tools.JavaFileObject;
    51 
    52 
   820         }
   821         }
   821     }
   822     }
   822 
   823 
   823     @Override
   824     @Override
   824     public Void visitValue(ValueTree tree, Void ignore) {
   825     public Void visitValue(ValueTree tree, Void ignore) {
       
   826         ReferenceTree ref = tree.getReference();
       
   827         if (ref == null || ref.getSignature().isEmpty()) {
       
   828             if (!isConstant(env.currElement))
       
   829                 env.messages.error(REFERENCE, tree, "dc.value.not.allowed.here");
       
   830         } else {
       
   831             Element e = env.trees.getElement(new DocTreePath(getCurrentPath(), ref));
       
   832             if (!isConstant(e))
       
   833                 env.messages.error(REFERENCE, tree, "dc.value.not.a.constant");
       
   834         }
       
   835 
   825         markEnclosingTag(Flag.HAS_INLINE_TAG);
   836         markEnclosingTag(Flag.HAS_INLINE_TAG);
   826         return super.visitValue(tree, ignore);
   837         return super.visitValue(tree, ignore);
       
   838     }
       
   839 
       
   840     private boolean isConstant(Element e) {
       
   841         if (e == null)
       
   842             return false;
       
   843 
       
   844         switch (e.getKind()) {
       
   845             case FIELD:
       
   846                 Object value = ((VariableElement) e).getConstantValue();
       
   847                 return (value != null); // can't distinguish "not a constant" from "constant is null"
       
   848             default:
       
   849                 return false;
       
   850         }
   827     }
   851     }
   828 
   852 
   829     @Override
   853     @Override
   830     public Void visitVersion(VersionTree tree, Void ignore) {
   854     public Void visitVersion(VersionTree tree, Void ignore) {
   831         warnIfEmpty(tree, tree.getBody());
   855         warnIfEmpty(tree, tree.getBody());