APIdia Launch Partner
Top Description Inners Fields Constructors Methods
com.sun.tools.javac.util

public Class RichDiagnosticFormatter

extends ForwardingDiagnosticFormatter<JCDiagnostic, AbstractDiagnosticFormatter>
Class Inheritance
Imports
java.nio.file.Path, java.util.EnumMap, .EnumSet, .HashMap, .LinkedHashMap, .Locale, .Map, java.util.function.Supplier, com.sun.tools.javac.code.Printer, .Symbol, com.sun.tools.javac.code.Symbol.*, .Symtab, .Type, com.sun.tools.javac.code.Type.*, .Types, com.sun.tools.javac.resources.CompilerProperties.Fragments

A rich diagnostic formatter is a formatter that provides better integration with javac's type system. A diagnostic is first preprocessed in order to keep track of each types/symbols in it; after this information is collected, the diagnostic is rendered using a standard formatter, whose type/symbol printer has been replaced by a more refined version provided by this rich formatter. The rich formatter currently enables three different features: (i) simple class names - that is class names are displayed used a non qualified name (thus omitting package info) whenever possible - (ii) where clause list - a list of additional subdiagnostics that provide specific info about type-variables, captured types, intersection types that occur in the diagnostic that is to be formatted and (iii) type-variable disambiguation - when the diagnostic refers to two different type-variables with the same name, their representation is disambiguated by appending an index to the type variable name.

This is NOT part of any supported API. If you write code that depends on this, you do so at your own risk. This code and its internal interfaces are subject to change or deletion without notice.

Nested and Inner Type Summary

Modifier and TypeClass and Description
protected class
RichDiagnosticFormatter.ClassNameSimplifier

A name simplifier keeps track of class names usages in order to determine whether a class name can be compacted or not.

public static class
RichDiagnosticFormatter.RichConfiguration

Configuration object provided by the rich formatter.

protected class
RichDiagnosticFormatter.RichPrinter

Enhanced type/symbol printer that provides support for features like simple names and type variable disambiguation.

pack-priv static enum
RichDiagnosticFormatter.WhereClauseKind

This enum defines all possible kinds of where clauses that can be attached by a rich diagnostic formatter to a given diagnostic

private static class

Field Summary

Modifier and TypeField and Description
pack-priv final JCDiagnostic.Factory
pack-priv final JavacMessages
protected RichDiagnosticFormatter.ClassNameSimplifier
private RichDiagnosticFormatter.RichPrinter
protected Types.DefaultSymbolVisitor<Void, Void>
pack-priv final Symtab
protected Types.UnaryVisitor<Void>
pack-priv final Types
pack-priv RichDiagnosticFormatter.WhereClauses
Inherited from com.sun.tools.javac.util.ForwardingDiagnosticFormatter:
configurationformatter

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
private String
public String
public String
public RichDiagnosticFormatter.RichConfiguration
protected RichDiagnosticFormatter.RichPrinter

Returns:

type/symbol rich printer
getRichPrinter
()

Returns the type/symbol printer used by this formatter.

protected List<JCDiagnostic>

Returns:

where clause list
getWhereClauses
()

Build a list of multiline diagnostics containing detailed info about type-variables, captured types, and intersection types

private int
public static RichDiagnosticFormatter
instance(Context context)

Get the DiagnosticFormatter instance for this context.

protected void
preprocessArgument(Object
the argument to be translated
arg
)

Preprocess a diagnostic argument.

protected void
preprocessDiagnostic(JCDiagnostic
the diagnostic to be preprocessed
diag
)

Preprocess a given diagnostic by looking both into its arguments and into its subdiagnostics (if any).

protected void
preprocessSymbol(Symbol s)

Preprocess a given symbol looking for (i) additional info (where clauses) to be added to the main diagnostic (ii) names to be compacted

protected void
preprocessType(Type t)

Preprocess a given type looking for (i) additional info (where clauses) to be added to the main diagnostic (ii) names to be compacted.

protected void
setRichPrinter(RichDiagnosticFormatter.RichPrinter
the rich printer to be set
printer
)

Sets the type/symbol printer used by this formatter.

private boolean
unique(Type.TypeVar typevar)

Inherited from com.sun.tools.javac.util.ForwardingDiagnosticFormatter:
displaySourceformatKindformatPositionformatSourcegetDelegatedFormatter

Field Detail

diagsback to summary
pack-priv final JCDiagnostic.Factory diags
messagesback to summary
pack-priv final JavacMessages messages
nameSimplifierback to summary
protected RichDiagnosticFormatter.ClassNameSimplifier nameSimplifier
printerback to summary
private RichDiagnosticFormatter.RichPrinter printer
symbolPreprocessorback to summary
protected Types.DefaultSymbolVisitor<Void, Void> symbolPreprocessor
symsback to summary
pack-priv final Symtab syms
typePreprocessorback to summary
protected Types.UnaryVisitor<Void> typePreprocessor
typesback to summary
pack-priv final Types types
whereClausesback to summary
pack-priv RichDiagnosticFormatter.WhereClauses whereClauses

Constructor Detail

RichDiagnosticFormatterback to summary
protected RichDiagnosticFormatter(Context context)
Annotations
@SuppressWarnings:this-escape

Method Detail

enterback to summary
private String enter(Supplier<String> r)
formatback to summary
public String format(JCDiagnostic diag, Locale l)

Overrides com.sun.tools.javac.util.ForwardingDiagnosticFormatter.format.

Implements com.sun.tools.javac.api.DiagnosticFormatter.format.

Doc from com.sun.tools.javac.api.DiagnosticFormatter.format.

Format the contents of a diagnostics.

Annotations
@Override
formatMessageback to summary
public String formatMessage(JCDiagnostic diag, Locale l)

Overrides com.sun.tools.javac.util.ForwardingDiagnosticFormatter.formatMessage.

Implements com.sun.tools.javac.api.DiagnosticFormatter.formatMessage.

Doc from com.sun.tools.javac.api.DiagnosticFormatter.formatMessage.

Controls the way in which a diagnostic message is displayed.

Annotations
@Override
getConfigurationback to summary
public RichDiagnosticFormatter.RichConfiguration getConfiguration()

Overrides com.sun.tools.javac.util.ForwardingDiagnosticFormatter.getConfiguration.

Implements com.sun.tools.javac.api.DiagnosticFormatter.getConfiguration.

Doc from com.sun.tools.javac.api.DiagnosticFormatter.getConfiguration.

Get a list of all the enabled verbosity options.

Annotations
@Override
getRichPrinterback to summary
protected RichDiagnosticFormatter.RichPrinter getRichPrinter()

Returns the type/symbol printer used by this formatter.

Returns:RichDiagnosticFormatter.RichPrinter

type/symbol rich printer

getWhereClausesback to summary
protected List<JCDiagnostic> getWhereClauses()

Build a list of multiline diagnostics containing detailed info about type-variables, captured types, and intersection types

Returns:List<JCDiagnostic>

where clause list

indexOfback to summary
private int indexOf(Type type, RichDiagnosticFormatter.WhereClauseKind kind)
instanceback to summary
public static RichDiagnosticFormatter instance(Context context)

Get the DiagnosticFormatter instance for this context.

preprocessArgumentback to summary
protected void preprocessArgument(Object arg)

Preprocess a diagnostic argument. A type/symbol argument is preprocessed by specialized type/symbol preprocessors.

Parameters
arg:Object

the argument to be translated

preprocessDiagnosticback to summary
protected void preprocessDiagnostic(JCDiagnostic diag)

Preprocess a given diagnostic by looking both into its arguments and into its subdiagnostics (if any). This preprocessing is responsible for generating info corresponding to features like where clauses, name simplification, etc.

Parameters
diag:JCDiagnostic

the diagnostic to be preprocessed

preprocessSymbolback to summary
protected void preprocessSymbol(Symbol s)

Preprocess a given symbol looking for (i) additional info (where clauses) to be added to the main diagnostic (ii) names to be compacted

preprocessTypeback to summary
protected void preprocessType(Type t)

Preprocess a given type looking for (i) additional info (where clauses) to be added to the main diagnostic (ii) names to be compacted.

setRichPrinterback to summary
protected void setRichPrinter(RichDiagnosticFormatter.RichPrinter printer)

Sets the type/symbol printer used by this formatter.

Parameters
printer:RichDiagnosticFormatter.RichPrinter

the rich printer to be set

uniqueback to summary
private boolean unique(Type.TypeVar typevar)
com.sun.tools.javac.util back to summary

protected Class RichDiagnosticFormatter.ClassNameSimplifier

extends Object
Class Inheritance
  • java.lang.Object
  • com.sun.tools.javac.util.RichDiagnosticFormatter.ClassNameSimplifier

A name simplifier keeps track of class names usages in order to determine whether a class name can be compacted or not. Short names are not used if a conflict is detected, e.g. when two classes with the same simple name belong to different packages - in this case the formatter reverts to fullnames as compact names might lead to a confusing diagnostic.

Field Summary

Modifier and TypeField and Description
pack-priv Map<Name, List<Symbol>>

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
protected void
addUsage(Symbol sym)

Add a name usage to the simplifier's internal cache

public String
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

nameClashesback to summary
pack-priv Map<Name, List<Symbol>> nameClashes

Constructor Detail

ClassNameSimplifierback to summary
protected ClassNameSimplifier()

Method Detail

addUsageback to summary
protected void addUsage(Symbol sym)

Add a name usage to the simplifier's internal cache

simplifyback to summary
public String simplify(Symbol s)
com.sun.tools.javac.util back to summary

public Class RichDiagnosticFormatter.RichConfiguration

extends ForwardingConfiguration
Class Inheritance

Configuration object provided by the rich formatter.

Nested and Inner Type Summary

Modifier and TypeClass and Description
public static enum
RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature

The advanced formatting features provided by the rich formatter

Field Summary

Modifier and TypeField and Description
protected EnumSet<RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature>
features

set of enabled rich formatter's features

Inherited from com.sun.tools.javac.util.ForwardingDiagnosticFormatter.ForwardingConfiguration:
configuration

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
disable(RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature
feature to be disabled
feature
)

Disable a specific feature on this rich formatter.

public void
enable(RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature
feature to be enabled
feature
)

Enable a specific feature on this rich formatter.

public RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature[]

Returns:

list of supported features
getAvailableFeatures
()

Returns a list of all the features supported by the rich formatter.

public boolean
isEnabled(RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature
feature to be tested
feature
)

Is a given feature enabled on this formatter?

Inherited from com.sun.tools.javac.util.ForwardingDiagnosticFormatter.ForwardingConfiguration:
getDelegatedConfigurationgetMultilineLimitgetVisiblesetMultilineLimitsetVisible

Field Detail

featuresback to summary
protected EnumSet<RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature> features

set of enabled rich formatter's features

Constructor Detail

RichConfigurationback to summary
public RichConfiguration(Options options, AbstractDiagnosticFormatter formatter)

Method Detail

disableback to summary
public void disable(RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature feature)

Disable a specific feature on this rich formatter.

Parameters
feature:RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature

feature to be disabled

enableback to summary
public void enable(RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature feature)

Enable a specific feature on this rich formatter.

Parameters
feature:RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature

feature to be enabled

getAvailableFeaturesback to summary
public RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature[] getAvailableFeatures()

Returns a list of all the features supported by the rich formatter.

Returns:RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature[]

list of supported features

isEnabledback to summary
public boolean isEnabled(RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature feature)

Is a given feature enabled on this formatter?

Parameters
feature:RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature

feature to be tested

com.sun.tools.javac.util back to summary

public final Enum RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature

extends Enum<RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature>
Class Inheritance

The advanced formatting features provided by the rich formatter

Field Summary

Modifier and TypeField and Description
public static final RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature
SIMPLE_NAMES

full class names simplification (where possible)

public static final RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature
UNIQUE_TYPEVAR_NAMES

type-variable names disambiguation

public static final RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature
WHERE_CLAUSES

a list of additional info regarding a given type/symbol

Constructor Summary

AccessConstructor and Description
private

Field Detail

SIMPLE_NAMESback to summary
public static final RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature SIMPLE_NAMES

full class names simplification (where possible)

UNIQUE_TYPEVAR_NAMESback to summary
public static final RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature UNIQUE_TYPEVAR_NAMES

type-variable names disambiguation

WHERE_CLAUSESback to summary
public static final RichDiagnosticFormatter.RichConfiguration.RichFormatterFeature WHERE_CLAUSES

a list of additional info regarding a given type/symbol

Constructor Detail

RichFormatterFeatureback to summary
private RichFormatterFeature()
com.sun.tools.javac.util back to summary

protected Class RichDiagnosticFormatter.RichPrinter

extends Printer
Class Inheritance

Enhanced type/symbol printer that provides support for features like simple names and type variable disambiguation. This enriched printer exploits the info discovered during type/symbol preprocessing. This printer is set on the delegate formatter so that rich type/symbol info can be properly rendered.

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
public String
capturedVarId(Type.CapturedType t, Locale locale)

Implements abstract com.sun.tools.javac.code.Printer.capturedVarId.

Maps a captured type into an unique identifier.

protected String
className(Type.ClassType t, boolean longform, Locale locale)

Overrides com.sun.tools.javac.code.Printer.className.

Converts a class name into a (possibly localized) string.

public String
localize(Locale locale, String key, Object... args)

Implements abstract com.sun.tools.javac.code.Printer.localize.

This method should be overridden in order to provide proper i18n support.

public String
public String
public String
public String
public String
public String
Inherited from com.sun.tools.javac.code.Printer:
createStandardPrinterprintAnnotationprintMethodArgsvisitvisitvisitArrayTypevisitErrorTypevisitForAllvisitMethodTypevisitModuleTypevisitOperatorSymbolvisitPackageSymbolvisitPackageTypevisitSymbolvisitSymbolsvisitTypesvisitTypeSymbolvisitUndetVarvisitVarSymbolvisitWildcardType

Constructor Detail

RichPrinterback to summary
protected RichPrinter()

Method Detail

capturedVarIdback to summary
public String capturedVarId(Type.CapturedType t, Locale locale)

Implements abstract com.sun.tools.javac.code.Printer.capturedVarId.

Doc from com.sun.tools.javac.code.Printer.capturedVarId.

Maps a captured type into an unique identifier.

Annotations
@Override
classNameback to summary
protected String className(Type.ClassType t, boolean longform, Locale locale)

Overrides com.sun.tools.javac.code.Printer.className.

Doc from com.sun.tools.javac.code.Printer.className.

Converts a class name into a (possibly localized) string. Anonymous inner classes get converted into a localized string.

Annotations
@Override
localizeback to summary
public String localize(Locale locale, String key, Object... args)

Implements abstract com.sun.tools.javac.code.Printer.localize.

Doc from com.sun.tools.javac.code.Printer.localize.

This method should be overridden in order to provide proper i18n support.

Annotations
@Override
visitCapturedTypeback to summary
public String visitCapturedType(Type.CapturedType t, Locale locale)

Overrides com.sun.tools.javac.code.Printer.visitCapturedType.

Implements com.sun.tools.javac.code.Type.Visitor.visitCapturedType.

Annotations
@Override
visitClassSymbolback to summary
public String visitClassSymbol(Symbol.ClassSymbol s, Locale locale)

Overrides com.sun.tools.javac.code.Printer.visitClassSymbol.

Implements com.sun.tools.javac.code.Symbol.Visitor.visitClassSymbol.

Annotations
@Override
visitClassTypeback to summary
public String visitClassType(Type.ClassType t, Locale locale)

Overrides com.sun.tools.javac.code.Printer.visitClassType.

Implements com.sun.tools.javac.code.Type.Visitor.visitClassType.

Annotations
@Override
visitMethodSymbolback to summary
public String visitMethodSymbol(Symbol.MethodSymbol s, Locale locale)

Overrides com.sun.tools.javac.code.Printer.visitMethodSymbol.

Implements com.sun.tools.javac.code.Symbol.Visitor.visitMethodSymbol.

Annotations
@Override
visitTypeback to summary
public String visitType(Type t, Locale locale)

Overrides com.sun.tools.javac.code.Printer.visitType.

Implements com.sun.tools.javac.code.Type.Visitor.visitType.

Annotations
@Override
visitTypeVarback to summary
public String visitTypeVar(Type.TypeVar t, Locale locale)

Overrides com.sun.tools.javac.code.Printer.visitTypeVar.

Implements com.sun.tools.javac.code.Type.Visitor.visitTypeVar.

Annotations
@Override
com.sun.tools.javac.util back to summary

pack-priv final Enum RichDiagnosticFormatter.WhereClauseKind

extends Enum<RichDiagnosticFormatter.WhereClauseKind>
Class Inheritance

This enum defines all possible kinds of where clauses that can be attached by a rich diagnostic formatter to a given diagnostic

Field Summary

Modifier and TypeField and Description
public static final RichDiagnosticFormatter.WhereClauseKind
CAPTURED

where clause regarding a captured type

public static final RichDiagnosticFormatter.WhereClauseKind
INTERSECTION

where clause regarding an intersection type

private final String
key

resource key for this where clause kind

public static final RichDiagnosticFormatter.WhereClauseKind
TYPEVAR

where clause regarding a type variable

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
pack-priv String
key()

public static RichDiagnosticFormatter.WhereClauseKind
public static RichDiagnosticFormatter.WhereClauseKind[]
Inherited from java.lang.Enum:
clonecompareTodescribeConstableequalsfinalizegetDeclaringClasshashCodenameordinaltoStringvalueOf

Field Detail

CAPTUREDback to summary
public static final RichDiagnosticFormatter.WhereClauseKind CAPTURED

where clause regarding a captured type

INTERSECTIONback to summary
public static final RichDiagnosticFormatter.WhereClauseKind INTERSECTION

where clause regarding an intersection type

keyback to summary
private final String key

resource key for this where clause kind

TYPEVARback to summary
public static final RichDiagnosticFormatter.WhereClauseKind TYPEVAR

where clause regarding a type variable

Constructor Detail

WhereClauseKindback to summary
private WhereClauseKind(String key)

Method Detail

keyback to summary
pack-priv String key()
valueOfback to summary
public static RichDiagnosticFormatter.WhereClauseKind valueOf(String name)
valuesback to summary
public static RichDiagnosticFormatter.WhereClauseKind[] values()
com.sun.tools.javac.util back to summary

private Class RichDiagnosticFormatter.WhereClauses

extends Object
Class Inheritance
  • java.lang.Object
  • com.sun.tools.javac.util.RichDiagnosticFormatter.WhereClauses

Field Summary

Modifier and TypeField and Description
private final Map<RichDiagnosticFormatter.WhereClauseKind, Map<Type, JCDiagnostic>>

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
public Map<Type, JCDiagnostic>
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

whereClausesback to summary
private final Map<RichDiagnosticFormatter.WhereClauseKind, Map<Type, JCDiagnostic>> whereClauses

Constructor Detail

WhereClausesback to summary
pack-priv WhereClauses()

Method Detail

getback to summary
public Map<Type, JCDiagnostic> get(RichDiagnosticFormatter.WhereClauseKind kind)