# HG changeset patch # User jlahoda # Date 1497527082 -7200 # Node ID ea7475564d076811483eb225d853c17c7a934398 # Parent d23ae2d67a5d804ba2381e8a58a1e80e020ca6f4 8170326: Inconsistencies between code, compiler.properties and comments Summary: Converting uses of Log and JCDiagnostic.Factory methods to use CompilerProperties instead of plain Strings, fixing inconsistencies, adding crules analyzer to ensure CompilerProperties are used whenever possible. Reviewed-by: mcimadamore diff -r d23ae2d67a5d -r ea7475564d07 langtools/make/tools/crules/CodingRulesAnalyzerPlugin.java --- a/langtools/make/tools/crules/CodingRulesAnalyzerPlugin.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/make/tools/crules/CodingRulesAnalyzerPlugin.java Thu Jun 15 13:44:42 2017 +0200 @@ -67,7 +67,8 @@ task.addTaskListener(new PostAnalyzeTaskListener( new MutableFieldsAnalyzer(task), new AssertCheckAnalyzer(task), - new DefinedByAnalyzer(task) + new DefinedByAnalyzer(task), + new LegacyLogMethodAnalyzer(task) )); } diff -r d23ae2d67a5d -r ea7475564d07 langtools/make/tools/crules/LegacyLogMethodAnalyzer.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/make/tools/crules/LegacyLogMethodAnalyzer.java Thu Jun 15 13:44:42 2017 +0200 @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package crules; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import com.sun.source.util.JavacTask; +import com.sun.source.util.TaskEvent.Kind; +import com.sun.tools.javac.code.Kinds; +import com.sun.tools.javac.code.Symbol; +import com.sun.tools.javac.code.Symbol.MethodSymbol; +import com.sun.tools.javac.code.Type; +import com.sun.tools.javac.tree.JCTree.JCClassDecl; +import com.sun.tools.javac.tree.JCTree.JCExpression; +import com.sun.tools.javac.tree.JCTree.JCMethodInvocation; +import com.sun.tools.javac.tree.JCTree.Tag; +import com.sun.tools.javac.tree.TreeInfo; +import com.sun.tools.javac.tree.TreeScanner; +import com.sun.tools.javac.util.AbstractLog; +import com.sun.tools.javac.util.JCDiagnostic; + +/**This analyzer guards against legacy Log.error/warning/note methods that don't use the typed keys.*/ +public class LegacyLogMethodAnalyzer extends AbstractCodingRulesAnalyzer { + + public LegacyLogMethodAnalyzer(JavacTask task) { + super(task); + treeVisitor = new LegacyLogMethodVisitor(); + eventKind = Kind.ANALYZE; + } + + private static final Set LEGACY_METHOD_NAMES = new HashSet<>( + Arrays.asList("error", "mandatoryWarning", "warning", "mandatoryNote", "note", "fragment")); + + class LegacyLogMethodVisitor extends TreeScanner { + + @Override + public void visitClassDef(JCClassDecl tree) { + if (!tree.sym.packge().fullname.toString().startsWith("com.sun.tools.javac.")) + return ; + super.visitClassDef(tree); + } + + @Override + public void visitApply(JCMethodInvocation tree) { + checkLegacyLogMethod(tree); + super.visitApply(tree); + } + + void checkLegacyLogMethod(JCMethodInvocation tree) { + Symbol method = TreeInfo.symbolFor(tree); + if (method == null || + method.kind != Kinds.Kind.MTH || + !typeToCheck(method.owner.type) || + !LEGACY_METHOD_NAMES.contains(method.name.toString()) || + !((MethodSymbol) method).isVarArgs() || + method.type.getParameterTypes().size() < 2) { + return ; + } + JCExpression key = tree.args.get(method.type.getParameterTypes().size() - 2); + if (key.hasTag(Tag.LITERAL)) { + messages.error(tree, "crules.use.of.legacy.log.method", tree); + } + } + + boolean typeToCheck(Type type) { + Symbol abstractLog = elements.getTypeElement(AbstractLog.class.getName()); + Symbol diagnosticFactory = elements.getTypeElement(JCDiagnostic.Factory.class.getName().replace('$', '.')); + return types.isSubtype(type, abstractLog.type) || + types.isSubtype(type, diagnosticFactory.type); + } + } +} diff -r d23ae2d67a5d -r ea7475564d07 langtools/make/tools/crules/resources/crules.properties --- a/langtools/make/tools/crules/resources/crules.properties Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/make/tools/crules/resources/crules.properties Thu Jun 15 13:44:42 2017 +0200 @@ -36,3 +36,5 @@ This method implements a public API method, and is marked with incorrect @DefinedBy. crules.defined.by.no.api=\ This method does not implement a public API method, and should not be marked with @DefinedBy. +crules.use.of.legacy.log.method=\ + Should not use legacy Log or JCDiagnostic.Factory methods when methods accepting an Error/Warning/Note/Fragment key can be used. diff -r d23ae2d67a5d -r ea7475564d07 langtools/make/tools/propertiesparser/parser/MessageFile.java --- a/langtools/make/tools/propertiesparser/parser/MessageFile.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/make/tools/propertiesparser/parser/MessageFile.java Thu Jun 15 13:44:42 2017 +0200 @@ -54,7 +54,7 @@ if (line.startsWith(keyPrefix + ".")) { int eq = line.indexOf("="); if (eq > 0) - messages.put(line.substring(0, eq), new Message(currLine)); + messages.put(line.substring(0, eq).trim(), new Message(currLine)); } } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/make/tools/propertiesparser/parser/MessageLine.java --- a/langtools/make/tools/propertiesparser/parser/MessageLine.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/make/tools/propertiesparser/parser/MessageLine.java Thu Jun 15 13:44:42 2017 +0200 @@ -32,7 +32,7 @@ public class MessageLine { static final Pattern emptyOrCommentPattern = Pattern.compile("( *#.*)?"); - static final Pattern typePattern = Pattern.compile("[-\\\\'A-Z\\.a-z ]+( \\([A-Za-z 0-9]+\\))?"); + static final Pattern typePattern = Pattern.compile("[-\\\\'A-Z\\.a-z ]+( \\([-A-Za-z 0-9]+\\))?"); static final Pattern infoPattern = Pattern.compile(String.format("# ([0-9]+: %s, )*[0-9]+: %s", typePattern.pattern(), typePattern.pattern())); diff -r d23ae2d67a5d -r ea7475564d07 langtools/make/tools/propertiesparser/parser/MessageType.java --- a/langtools/make/tools/propertiesparser/parser/MessageType.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/make/tools/propertiesparser/parser/MessageType.java Thu Jun 15 13:44:42 2017 +0200 @@ -71,7 +71,10 @@ */ public enum SimpleType implements MessageType { + ANNOTATION("annotation", "Compound", "com.sun.tools.javac.code.Attribute"), BOOLEAN("boolean", "boolean", null), + COLLECTION("collection", "Collection", "java.util"), + FLAG("flag", "Flag", "com.sun.tools.javac.code.Flags"), FRAGMENT("fragment", "Fragment", null), DIAGNOSTIC("diagnostic", "JCDiagnostic", "com.sun.tools.javac.util"), MODIFIER("modifier", "Modifier", "javax.lang.model.element"), @@ -81,7 +84,7 @@ NAME("name", "Name", "com.sun.tools.javac.util"), NUMBER("number", "int", null), OPTION_NAME("option name", "Option", "com.sun.tools.javac.main"), - SOURCE_VERSION("source version", "Source", "com.sun.tools.javac.code"), + SOURCE_VERSION("source version", "SourceVersion", "javax.lang.model"), STRING("string", "String", null), SYMBOL("symbol", "Symbol", "com.sun.tools.javac.code"), SYMBOL_KIND("symbol kind", "Kind", "com.sun.tools.javac.code.Kinds"), @@ -131,6 +134,7 @@ * Compound type kind. */ public enum Kind { + COLLECTION("collection of", SimpleType.COLLECTION), LIST("list of", SimpleType.LIST), SET("set of", SimpleType.SET); @@ -180,7 +184,7 @@ */ public enum Kind { MESSAGE_SEGMENT("message segment", SimpleType.DIAGNOSTIC, SimpleType.FRAGMENT), - FILE_NAME("file name", SimpleType.FILE, SimpleType.FILE_OBJECT); + FILE_NAME("file name", SimpleType.FILE, SimpleType.FILE_OBJECT, SimpleType.PATH); final String kindName; final SimpleType[] choices; diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/BasicJavacTask.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/BasicJavacTask.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/BasicJavacTask.java Thu Jun 15 13:44:42 2017 +0200 @@ -52,6 +52,7 @@ import com.sun.tools.javac.platform.PlatformDescription; import com.sun.tools.javac.platform.PlatformDescription.PluginInfo; import com.sun.tools.javac.processing.JavacProcessingEnvironment; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; @@ -219,7 +220,7 @@ } } for (List p: pluginsToCall) { - Log.instance(context).error("plugin.not.found", p.head); + Log.instance(context).error(Errors.PluginNotFound(p.head)); } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java Thu Jun 15 13:44:42 2017 +0200 @@ -102,6 +102,9 @@ import com.sun.tools.javac.parser.Tokens.Comment; import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle; import com.sun.tools.javac.processing.JavacProcessingEnvironment; +import com.sun.tools.javac.resources.CompilerProperties.Errors; +import com.sun.tools.javac.resources.CompilerProperties.Notes; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.DCTree; import com.sun.tools.javac.tree.DCTree.DCBlockTag; import com.sun.tools.javac.tree.DCTree.DCDocComment; @@ -1129,19 +1132,19 @@ try { switch (kind) { case ERROR: - log.error(DiagnosticFlag.MULTIPLE, pos, "proc.messager", msg.toString()); + log.error(DiagnosticFlag.MULTIPLE, pos, Errors.ProcMessager(msg.toString())); break; case WARNING: - log.warning(pos, "proc.messager", msg.toString()); + log.warning(pos, Warnings.ProcMessager(msg.toString())); break; case MANDATORY_WARNING: - log.mandatoryWarning(pos, "proc.messager", msg.toString()); + log.mandatoryWarning(pos, Warnings.ProcMessager(msg.toString())); break; default: - log.note(pos, "proc.messager", msg.toString()); + log.note(pos, Notes.ProcMessager(msg.toString())); } } finally { if (oldSource != null) diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Thu Jun 15 13:44:42 2017 +0200 @@ -56,6 +56,7 @@ import com.sun.tools.javac.jvm.Profile; import com.sun.tools.javac.main.Option; import com.sun.tools.javac.platform.PlatformDescription; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; import com.sun.tools.javac.util.*; import static javax.tools.StandardLocation.*; @@ -292,7 +293,9 @@ try { fillIn(p); } catch (IOException ex) { - throw new CompletionFailure(sym, ex.getLocalizedMessage()).initCause(ex); + JCDiagnostic msg = + diagFactory.fragment(Fragments.ExceptionMessage(ex.getLocalizedMessage())); + throw new CompletionFailure(sym, msg).initCause(ex); } } if (!reader.filling) @@ -329,7 +332,9 @@ */ void fillIn(ClassSymbol c) { if (completionFailureName == c.fullname) { - throw new CompletionFailure(c, "user-selected completion failure by class name"); + JCDiagnostic msg = + diagFactory.fragment(Fragments.UserSelectedCompletionFailure); + throw new CompletionFailure(c, msg); } currentOwner = c; JavaFileObject classfile = c.classfile; @@ -365,7 +370,7 @@ // where private CompletionFailure classFileNotFound(ClassSymbol c) { JCDiagnostic diag = - diagFactory.fragment("class.file.not.found", c.flatname); + diagFactory.fragment(Fragments.ClassFileNotFound(c.flatname)); return newCompletionFailure(c, diag); } /** Static factory for CompletionFailure objects. diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ModuleFinder.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ModuleFinder.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ModuleFinder.java Thu Jun 15 13:44:42 2017 +0200 @@ -225,7 +225,7 @@ name = moduleNameFromSourceReader.readModuleName(fo); if (name == null) { JCDiagnostic diag = - diags.fragment("file.does.not.contain.module"); + diags.fragment(Fragments.FileDoesNotContainModule); ClassSymbol errModuleInfo = syms.defineClass(names.module_info, syms.errModule); throw new ClassFinder.BadClassFile(errModuleInfo, fo, diag, diags); } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Thu Jun 15 13:44:42 2017 +0200 @@ -2148,18 +2148,6 @@ */ public JCDiagnostic diag; - /** A localized string describing the failure. - * @deprecated Use {@code getDetail()} or {@code getMessage()} - */ - @Deprecated - public String errmsg; - - public CompletionFailure(Symbol sym, String errmsg) { - this.sym = sym; - this.errmsg = errmsg; -// this.printStackTrace();//DEBUG - } - public CompletionFailure(Symbol sym, JCDiagnostic diag) { this.sym = sym; this.diag = diag; @@ -2172,14 +2160,11 @@ @Override public String getMessage() { - if (diag != null) - return diag.getMessage(null); - else - return errmsg; + return diag.getMessage(null); } - public Object getDetailValue() { - return (diag != null ? diag : errmsg); + public JCDiagnostic getDetailValue() { + return diag; } @Override diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotations.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotations.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotations.java Thu Jun 15 13:44:42 2017 +0200 @@ -55,6 +55,7 @@ import com.sun.tools.javac.comp.Attr; import com.sun.tools.javac.comp.AttrContext; import com.sun.tools.javac.comp.Env; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.tree.JCTree.JCBlock; @@ -480,12 +481,12 @@ // The normal declaration annotation checks make sure that the use is valid. break; case 1: - log.error(typetree.pos(), "cant.type.annotate.scoping.1", - onlyTypeAnnotations); + log.error(typetree.pos(), + Errors.CantTypeAnnotateScoping1(onlyTypeAnnotations.head)); break; default: - log.error(typetree.pos(), "cant.type.annotate.scoping", - onlyTypeAnnotations); + log.error(typetree.pos(), + Errors.CantTypeAnnotateScoping(onlyTypeAnnotations)); } return type; } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Thu Jun 15 13:44:42 2017 +0200 @@ -58,6 +58,7 @@ import static com.sun.tools.javac.code.Type.*; import static com.sun.tools.javac.code.TypeTag.*; import static com.sun.tools.javac.jvm.ClassFile.externalize; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; /** * Utility class containing various operations on types. @@ -374,7 +375,7 @@ if (!chk.checkValidGenericType(site)) { //if the inferred functional interface type is not well-formed, //or if it's not a subtype of the original target, issue an error - throw failure(diags.fragment("no.suitable.functional.intf.inst", site)); + throw failure(diags.fragment(Fragments.NoSuitableFunctionalIntfInst(site))); } return memberType(site, descSym); } @@ -434,13 +435,13 @@ } else { //the target method(s) should be the only abstract members of t throw failure("not.a.functional.intf.1", origin, - diags.fragment("incompatible.abstracts", Kinds.kindName(origin), origin)); + diags.fragment(Fragments.IncompatibleAbstracts(Kinds.kindName(origin), origin))); } } if (abstracts.isEmpty()) { //t must define a suitable non-generic method throw failure("not.a.functional.intf.1", origin, - diags.fragment("no.abstracts", Kinds.kindName(origin), origin)); + diags.fragment(Fragments.NoAbstracts(Kinds.kindName(origin), origin))); } else if (abstracts.size() == 1) { return new FunctionDescriptor(abstracts.first()); } else { // size > 1 @@ -456,9 +457,11 @@ desc.type.getReturnType(), desc.type.getThrownTypes())); } + JCDiagnostic msg = + diags.fragment(Fragments.IncompatibleDescsInFunctionalIntf(Kinds.kindName(origin), + origin)); JCDiagnostic.MultilineDiagnostic incompatibleDescriptors = - new JCDiagnostic.MultilineDiagnostic(diags.fragment("incompatible.descs.in.functional.intf", - Kinds.kindName(origin), origin), descriptors.toList()); + new JCDiagnostic.MultilineDiagnostic(msg, descriptors.toList()); throw failure(incompatibleDescriptors); } return descRes; diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java Thu Jun 15 13:44:42 2017 +0200 @@ -30,6 +30,7 @@ import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Types; import com.sun.tools.javac.comp.ArgumentAttr.LocalCacheContext; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCBlock; import com.sun.tools.javac.tree.JCTree.JCClassDecl; @@ -246,7 +247,7 @@ explicitArgs = explicitArgs.tail; } //exact match - log.warning(oldTree.clazz, "diamond.redundant.args"); + log.warning(oldTree.clazz, Warnings.DiamondRedundantArgs); } } } @@ -294,7 +295,7 @@ @Override void process (JCNewClass oldTree, JCLambda newTree, boolean hasErrors){ if (!hasErrors) { - log.warning(oldTree.def, "potential.lambda.found"); + log.warning(oldTree.def, Warnings.PotentialLambdaFound); } } } @@ -322,7 +323,7 @@ void process (JCMethodInvocation oldTree, JCMethodInvocation newTree, boolean hasErrors){ if (!hasErrors) { //exact match - log.warning(oldTree, "method.redundant.typeargs"); + log.warning(oldTree, Warnings.MethodRedundantTypeargs); } } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java Thu Jun 15 13:44:42 2017 +0200 @@ -254,7 +254,7 @@ Lint prevLint = deferPos != null ? null : chk.setLint(lint); try { if (s.hasAnnotations() && annotations.nonEmpty()) - log.error(annotations.head.pos, "already.annotated", Kinds.kindName(s), s); + log.error(annotations.head.pos, Errors.AlreadyAnnotated(Kinds.kindName(s), s)); Assert.checkNonNull(s, "Symbol argument to actualEnterAnnotations is null"); @@ -342,7 +342,7 @@ if (annotated.containsKey(a.type.tsym)) { if (!allowRepeatedAnnos) { - log.error(DiagnosticFlag.SOURCE_LEVEL, a.pos(), "repeatable.annotations.not.supported.in.source", sourceName); + log.error(DiagnosticFlag.SOURCE_LEVEL, a.pos(), Errors.RepeatableAnnotationsNotSupportedInSource(sourceName)); } ListBuffer l = annotated.get(a.type.tsym); l = l.append(c); @@ -456,8 +456,7 @@ boolean isError = a.type.isErroneous(); if (!a.type.tsym.isAnnotationType() && !isError) { - log.error(a.annotationType.pos(), - "not.annotation.type", a.type.toString()); + log.error(a.annotationType.pos(), Errors.NotAnnotationType(a.type)); isError = true; } @@ -486,13 +485,13 @@ Type thisAnnotationType, boolean badAnnotation, Env env, boolean elidedValue) { if (!nameValuePair.hasTag(ASSIGN)) { - log.error(nameValuePair.pos(), "annotation.value.must.be.name.value"); + log.error(nameValuePair.pos(), Errors.AnnotationValueMustBeNameValue); attributeAnnotationValue(nameValuePair.type = syms.errType, nameValuePair, env); return null; } JCAssign assign = (JCAssign)nameValuePair; if (!assign.lhs.hasTag(IDENT)) { - log.error(nameValuePair.pos(), "annotation.value.must.be.name.value"); + log.error(nameValuePair.pos(), Errors.AnnotationValueMustBeNameValue); attributeAnnotationValue(nameValuePair.type = syms.errType, nameValuePair, env); return null; } @@ -505,7 +504,7 @@ left.sym = method; left.type = method.type; if (method.owner != thisAnnotationType.tsym && !badAnnotation) - log.error(left.pos(), "no.annotation.member", left.name, thisAnnotationType); + log.error(left.pos(), Errors.NoAnnotationMember(left.name, thisAnnotationType)); Type resultType = method.type.getReturnType(); // Compute value part @@ -526,7 +525,7 @@ try { expectedElementType.tsym.complete(); } catch(CompletionFailure e) { - log.error(tree.pos(), "cant.resolve", Kinds.kindName(e.sym), e.sym); + log.error(tree.pos(), Errors.CantResolve(Kinds.kindName(e.sym), e.sym.getQualifiedName(), null, null)); expectedElementType = syms.errType; } @@ -538,10 +537,10 @@ //error recovery if (tree.hasTag(NEWARRAY)) { if (!expectedElementType.isErroneous()) - log.error(tree.pos(), "annotation.value.not.allowable.type"); + log.error(tree.pos(), Errors.AnnotationValueNotAllowableType); JCNewArray na = (JCNewArray)tree; if (na.elemtype != null) { - log.error(na.elemtype.pos(), "new.not.allowed.in.annotation"); + log.error(na.elemtype.pos(), Errors.NewNotAllowedInAnnotation); } for (List l = na.elems; l.nonEmpty(); l=l.tail) { attributeAnnotationValue(syms.errType, @@ -555,7 +554,7 @@ if (tree.hasTag(ANNOTATION)) { return attributeAnnotation((JCAnnotation)tree, expectedElementType, env); } else { - log.error(tree.pos(), "annotation.value.must.be.annotation"); + log.error(tree.pos(), Errors.AnnotationValueMustBeAnnotation); expectedElementType = syms.errType; } } @@ -563,7 +562,7 @@ //error recovery if (tree.hasTag(ANNOTATION)) { if (!expectedElementType.isErroneous()) - log.error(tree.pos(), "annotation.not.valid.for.type", expectedElementType); + log.error(tree.pos(), Errors.AnnotationNotValidForType(expectedElementType)); attributeAnnotation((JCAnnotation)tree, syms.errType, env); return new Attribute.Error(((JCAnnotation)tree).annotationType.type); } @@ -598,7 +597,7 @@ //error recovery: if (!expectedElementType.isErroneous()) - log.error(tree.pos(), "annotation.value.not.allowable.type"); + log.error(tree.pos(), Errors.AnnotationValueNotAllowableType); return new Attribute.Error(attr.attribExpr(tree, env, expectedElementType)); } @@ -609,7 +608,7 @@ TreeInfo.nonstaticSelect(tree) || sym.kind != VAR || (sym.flags() & Flags.ENUM) == 0) { - log.error(tree.pos(), "enum.annotation.must.be.enum.constant"); + log.error(tree.pos(), Errors.EnumAnnotationMustBeEnumConstant); return new Attribute.Error(result.getOriginalType()); } VarSymbol enumerator = (VarSymbol) sym; @@ -640,7 +639,7 @@ if (result.isErroneous()) return new Attribute.Error(result.getOriginalType()); if (result.constValue() == null) { - log.error(tree.pos(), "attribute.value.must.be.constant"); + log.error(tree.pos(), Errors.AttributeValueMustBeConstant); return new Attribute.Error(expectedElementType); } result = cfolder.coerce(result, expectedElementType); @@ -656,7 +655,7 @@ JCNewArray na = (JCNewArray)tree; if (na.elemtype != null) { - log.error(na.elemtype.pos(), "new.not.allowed.in.annotation"); + log.error(na.elemtype.pos(), Errors.NewNotAllowedInAnnotation); } ListBuffer buf = new ListBuffer<>(); for (List l = na.elems; l.nonEmpty(); l=l.tail) { @@ -751,7 +750,7 @@ } if (!repeated.isEmpty() && targetContainerType == null) { - log.error(ctx.pos.get(annotations.head), "duplicate.annotation.invalid.repeated", origAnnoType); + log.error(ctx.pos.get(annotations.head), Errors.DuplicateAnnotationInvalidRepeated(origAnnoType)); return null; } @@ -798,7 +797,7 @@ } if (!chk.validateAnnotationDeferErrors(annoTree)) - log.error(annoTree.pos(), "duplicate.annotation.invalid.repeated", origAnnoType); + log.error(annoTree.pos(), Errors.DuplicateAnnotationInvalidRepeated(origAnnoType)); c = attributeAnnotation(annoTree, targetContainerType, ctx.env); c.setSynthesized(true); @@ -827,7 +826,7 @@ Attribute.Compound ca = origAnnoDecl.getAnnotationTypeMetadata().getRepeatable(); if (ca == null) { // has no Repeatable annotation if (reportError) - log.error(pos, "duplicate.annotation.missing.container", origAnnoType, syms.repeatableType); + log.error(pos, Errors.DuplicateAnnotationMissingContainer(origAnnoType)); return null; } @@ -855,17 +854,17 @@ // Repeatable must have at least one element if (ca.values.isEmpty()) { - log.error(pos, "invalid.repeatable.annotation", annoDecl); + log.error(pos, Errors.InvalidRepeatableAnnotation(annoDecl)); return null; } Pair p = ca.values.head; Name name = p.fst.name; if (name != names.value) { // should contain only one element, named "value" - log.error(pos, "invalid.repeatable.annotation", annoDecl); + log.error(pos, Errors.InvalidRepeatableAnnotation(annoDecl)); return null; } if (!(p.snd instanceof Attribute.Class)) { // check that the value of "value" is an Attribute.Class - log.error(pos, "invalid.repeatable.annotation", annoDecl); + log.error(pos, Errors.InvalidRepeatableAnnotation(annoDecl)); return null; } @@ -900,14 +899,12 @@ } if (error) { log.error(pos, - "invalid.repeatable.annotation.multiple.values", - targetContainerType, - nr_value_elems); + Errors.InvalidRepeatableAnnotationMultipleValues(targetContainerType, + nr_value_elems)); return null; } else if (nr_value_elems == 0) { log.error(pos, - "invalid.repeatable.annotation.no.value", - targetContainerType); + Errors.InvalidRepeatableAnnotationNoValue(targetContainerType)); return null; } @@ -915,8 +912,7 @@ // probably "impossible" to fail this if (containerValueSymbol.kind != MTH) { log.error(pos, - "invalid.repeatable.annotation.invalid.value", - targetContainerType); + Errors.InvalidRepeatableAnnotationInvalidValue(targetContainerType)); fatalError = true; } @@ -927,10 +923,9 @@ if (!(types.isArray(valueRetType) && types.isSameType(expectedType, valueRetType))) { log.error(pos, - "invalid.repeatable.annotation.value.return", - targetContainerType, - valueRetType, - expectedType); + Errors.InvalidRepeatableAnnotationValueReturn(targetContainerType, + valueRetType, + expectedType)); fatalError = true; } @@ -951,8 +946,7 @@ ListBuffer manualContainer = ctx.annotated.get(validRepeated.type.tsym); if (manualContainer != null) { log.error(ctx.pos.get(manualContainer.first()), - "invalid.repeatable.annotation.repeated.and.container.present", - manualContainer.first().type.tsym); + Errors.InvalidRepeatableAnnotationRepeatedAndContainerPresent(manualContainer.first().type.tsym)); } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java Thu Jun 15 13:44:42 2017 +0200 @@ -41,6 +41,7 @@ import com.sun.tools.javac.comp.DeferredAttr.LambdaReturnScanner; import com.sun.tools.javac.comp.Infer.PartiallyInferredMethodType; import com.sun.tools.javac.comp.Resolve.MethodResolutionPhase; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCConditional; import com.sun.tools.javac.tree.JCTree.JCExpression; @@ -433,7 +434,7 @@ return localInfo.check(speculativeTree, speculativeTree.type); } else if (resultInfo.pt.hasTag(VOID)) { //this means we are returning a poly conditional from void-compatible lambda expression - resultInfo.checkContext.report(tree, attr.diags.fragment("conditional.target.cant.be.void")); + resultInfo.checkContext.report(tree, attr.diags.fragment(Fragments.ConditionalTargetCantBeVoid)); return attr.types.createErrorType(resultInfo.pt); } else { //poly diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Jun 15 13:44:42 2017 +0200 @@ -53,6 +53,7 @@ import static com.sun.tools.javac.resources.CompilerProperties.Fragments.DiamondInvalidArgs; import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.resources.CompilerProperties.Fragments; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.*; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.tree.JCTree.JCPolyExpression.*; @@ -227,9 +228,9 @@ !resultInfo.pt.hasTag(METHOD) && !resultInfo.pt.hasTag(FORALL); if (shouldCheck && !ownkind.subset(resultInfo.pkind)) { - log.error(tree.pos(), "unexpected.type", - resultInfo.pkind.kindNames(), - ownkind.kindNames()); + log.error(tree.pos(), + Errors.UnexpectedType(resultInfo.pkind.kindNames(), + ownkind.kindNames())); owntype = types.createErrorType(found); } else if (allowPoly && inferenceContext.free(found)) { //delay the check if there are inference variables in the found type @@ -292,9 +293,9 @@ (base.hasTag(IDENT) && TreeInfo.name(base) == names._this)) && isAssignableAsBlankFinal(v, env)))) { if (v.isResourceVariable()) { //TWR resource - log.error(pos, "try.resource.may.not.be.assigned", v); + log.error(pos, Errors.TryResourceMayNotBeAssigned(v)); } else { - log.error(pos, "cant.assign.val.to.final.var", v); + log.error(pos, Errors.CantAssignValToFinalVar(v)); } } } @@ -868,7 +869,7 @@ final DiagnosticPosition pos = tree.hasTag(TYPEAPPLY) ? (((JCTypeApply) tree).clazz).pos() : tree.pos(); if (t.tsym.isAnonymous()) { - log.error(pos, "cant.inherit.from.anon"); + log.error(pos, Errors.CantInheritFromAnon); return types.createErrorType(t); } if (t.isErroneous()) @@ -876,27 +877,27 @@ if (t.hasTag(TYPEVAR) && !classExpected && !interfaceExpected) { // check that type variable is already visible if (t.getUpperBound() == null) { - log.error(pos, "illegal.forward.ref"); + log.error(pos, Errors.IllegalForwardRef); return types.createErrorType(t); } } else { t = chk.checkClassType(pos, t, checkExtensible); } if (interfaceExpected && (t.tsym.flags() & INTERFACE) == 0) { - log.error(pos, "intf.expected.here"); + log.error(pos, Errors.IntfExpectedHere); // return errType is necessary since otherwise there might // be undetected cycles which cause attribution to loop return types.createErrorType(t); } else if (checkExtensible && classExpected && (t.tsym.flags() & INTERFACE) != 0) { - log.error(pos, "no.intf.expected.here"); + log.error(pos, Errors.NoIntfExpectedHere); return types.createErrorType(t); } if (checkExtensible && ((t.tsym.flags() & FINAL) != 0)) { log.error(pos, - "cant.inherit.from.final", t.tsym); + Errors.CantInheritFromFinal(t.tsym)); } chk.checkNonCyclic(pos, t); return t; @@ -980,7 +981,7 @@ chk.checkOverride(env, tree, m); if (isDefaultMethod && types.overridesObjectMethod(m.enclClass(), m)) { - log.error(tree, "default.overrides.object.member", m.name, Kinds.kindName(m.location()), m.location()); + log.error(tree, Errors.DefaultOverridesObjectMember(m.name, Kinds.kindName(m.location()), m.location())); } // Enter all type parameters into the local method scope. @@ -994,7 +995,7 @@ log.error(tree.params.nonEmpty() ? tree.params.head.pos() : tree.recvparam.pos(), - "intf.annotation.members.cant.have.params"); + Errors.IntfAnnotationMembersCantHaveParams); // Attribute all value parameters. for (List l = tree.params; l.nonEmpty(); l = l.tail) { @@ -1025,12 +1026,12 @@ // annotation method cannot have throws clause if (tree.thrown.nonEmpty()) { log.error(tree.thrown.head.pos(), - "throws.not.allowed.in.intf.annotation"); + Errors.ThrowsNotAllowedInIntfAnnotation); } // annotation method cannot declare type-parameters if (tree.typarams.nonEmpty()) { log.error(tree.typarams.head.pos(), - "intf.annotation.members.cant.have.type.params"); + Errors.IntfAnnotationMembersCantHaveTypeParams); } // validate annotation method's return type (could be an annotation type) chk.validateAnnotationType(tree.restype); @@ -1048,18 +1049,18 @@ if (tree.defaultValue != null) { if ((owner.flags() & ANNOTATION) == 0) log.error(tree.pos(), - "default.allowed.in.intf.annotation.member"); + Errors.DefaultAllowedInIntfAnnotationMember); } if (isDefaultMethod || (tree.sym.flags() & (ABSTRACT | NATIVE)) == 0) - log.error(tree.pos(), "missing.meth.body.or.decl.abstract"); + log.error(tree.pos(), Errors.MissingMethBodyOrDeclAbstract); } else if ((tree.sym.flags() & (ABSTRACT|DEFAULT|PRIVATE)) == ABSTRACT) { if ((owner.flags() & INTERFACE) != 0) { - log.error(tree.body.pos(), "intf.meth.cant.have.body"); + log.error(tree.body.pos(), Errors.IntfMethCantHaveBody); } else { - log.error(tree.pos(), "abstract.meth.cant.have.body"); + log.error(tree.pos(), Errors.AbstractMethCantHaveBody); } } else if ((tree.mods.flags & NATIVE) != 0) { - log.error(tree.pos(), "native.meth.cant.have.body"); + log.error(tree.pos(), Errors.NativeMethCantHaveBody); } else { // Add an implicit super() call unless an explicit call to // super(...) or this(...) is given @@ -1081,8 +1082,7 @@ // in enum constructors, except in the compiler // generated one. log.error(tree.body.stats.head.pos(), - "call.to.super.not.allowed.in.enum.ctor", - env.enclClass.sym); + Errors.CallToSuperNotAllowedInEnumCtor(env.enclClass.sym)); } } @@ -1252,9 +1252,8 @@ Type base = types.asSuper(exprType, syms.iterableType.tsym); if (base == null) { log.error(tree.expr.pos(), - "foreach.not.applicable.to.type", - exprType, - diags.fragment("type.req.array.or.iterable")); + Errors.ForeachNotApplicableToType(exprType, + Fragments.TypeReqArrayOrIterable)); elemtype = types.createErrorType(exprType); } else { List iterableParams = base.allparams(); @@ -1279,8 +1278,8 @@ while (env1 != null && !env1.tree.hasTag(CLASSDEF)) { if (env1.tree.hasTag(LABELLED) && ((JCLabeledStatement) env1.tree).label == tree.label) { - log.error(tree.pos(), "label.already.in.use", - tree.label); + log.error(tree.pos(), + Errors.LabelAlreadyInUse(tree.label)); break; } env1 = env1.next; @@ -1301,7 +1300,7 @@ boolean enumSwitch = (seltype.tsym.flags() & Flags.ENUM) != 0; boolean stringSwitch = types.isSameType(seltype, syms.stringType); if (stringSwitch && !allowStringsInSwitch) { - log.error(DiagnosticFlag.SOURCE_LEVEL, tree.selector.pos(), "string.switch.not.supported.in.source", sourceName); + log.error(DiagnosticFlag.SOURCE_LEVEL, tree.selector.pos(), Errors.StringSwitchNotSupportedInSource(sourceName)); } if (!enumSwitch && !stringSwitch) seltype = chk.checkType(tree.selector.pos(), seltype, syms.intType); @@ -1316,9 +1315,9 @@ if (enumSwitch) { Symbol sym = enumConstant(c.pat, seltype); if (sym == null) { - log.error(c.pat.pos(), "enum.label.must.be.unqualified.enum"); + log.error(c.pat.pos(), Errors.EnumLabelMustBeUnqualifiedEnum); } else if (!labels.add(sym)) { - log.error(c.pos(), "duplicate.case.label"); + log.error(c.pos(), Errors.DuplicateCaseLabel); } } else { Type pattype = attribExpr(c.pat, switchEnv, seltype); @@ -1327,12 +1326,12 @@ log.error(c.pat.pos(), (stringSwitch ? "string.const.req" : "const.expr.req")); } else if (!labels.add(pattype.constValue())) { - log.error(c.pos(), "duplicate.case.label"); + log.error(c.pos(), Errors.DuplicateCaseLabel); } } } } else if (hasDefault) { - log.error(c.pos(), "duplicate.default.label"); + log.error(c.pos(), Errors.DuplicateDefaultLabel); } else { hasDefault = true; } @@ -1401,7 +1400,7 @@ CheckContext twrContext = new Check.NestedCheckContext(resultInfo.checkContext) { @Override public void report(DiagnosticPosition pos, JCDiagnostic details) { - chk.basicHandler.report(pos, diags.fragment("try.not.applicable.to.type", details)); + chk.basicHandler.report(pos, diags.fragment(Fragments.TryNotApplicableToType(details))); } }; ResultInfo twrResult = @@ -1481,7 +1480,7 @@ close.overrides(syms.autoCloseableClose, resource.tsym, types, true) && chk.isHandled(syms.interruptedExceptionType, types.memberType(resource, close).getThrownTypes()) && env.info.lint.isEnabled(LintCategory.TRY)) { - log.warning(LintCategory.TRY, pos, "try.resource.throws.interrupted.exc", resource); + log.warning(LintCategory.TRY, pos, Warnings.TryResourceThrowsInterruptedExc(resource)); } } } @@ -1496,7 +1495,7 @@ if (tree.polyKind == PolyKind.POLY && resultInfo.pt.hasTag(VOID)) { //this means we are returning a poly conditional from void-compatible lambda expression - resultInfo.checkContext.report(tree, diags.fragment("conditional.target.cant.be.void")); + resultInfo.checkContext.report(tree, diags.fragment(Fragments.ConditionalTargetCantBeVoid)); result = tree.type = types.createErrorType(resultInfo.pt); return; } @@ -1574,7 +1573,7 @@ //depending on whether boxing is allowed, we could have incompatibilities @Override public void report(DiagnosticPosition pos, JCDiagnostic details) { - enclosingContext.report(pos, diags.fragment("incompatible.type.in.conditional", details)); + enclosingContext.report(pos, diags.fragment(Fragments.IncompatibleTypeInConditional(details))); } }; } @@ -1640,8 +1639,9 @@ return thentype.baseType(); if (thentype.hasTag(VOID) || elsetype.hasTag(VOID)) { - log.error(pos, "neither.conditional.subtype", - thentype, elsetype); + log.error(pos, + Errors.NeitherConditionalSubtype(thentype, + elsetype)); return thentype.baseType(); } @@ -1720,7 +1720,7 @@ !labelled.body.hasTag(WHILELOOP) && !labelled.body.hasTag(FORLOOP) && !labelled.body.hasTag(FOREACHLOOP)) - log.error(pos, "not.loop.label", label); + log.error(pos, Errors.NotLoopLabel(label)); // Found labelled statement target, now go inwards // to next non-labelled tree. return TreeInfo.referencedStatement(labelled); @@ -1747,11 +1747,11 @@ env1 = env1.next; } if (label != null) - log.error(pos, "undef.label", label); + log.error(pos, Errors.UndefLabel(label)); else if (tag == CONTINUE) - log.error(pos, "cont.outside.loop"); + log.error(pos, Errors.ContOutsideLoop); else - log.error(pos, "break.outside.switch.loop"); + log.error(pos, Errors.BreakOutsideSwitchLoop); return null; } @@ -1759,20 +1759,20 @@ // Check that there is an enclosing method which is // nested within than the enclosing class. if (env.info.returnResult == null) { - log.error(tree.pos(), "ret.outside.meth"); + log.error(tree.pos(), Errors.RetOutsideMeth); } else { // Attribute return expression, if it exists, and check that // it conforms to result type of enclosing method. if (tree.expr != null) { if (env.info.returnResult.pt.hasTag(VOID)) { env.info.returnResult.checkContext.report(tree.expr.pos(), - diags.fragment("unexpected.ret.val")); + diags.fragment(Fragments.UnexpectedRetVal)); } attribTree(tree.expr, env, env.info.returnResult); } else if (!env.info.returnResult.pt.hasTag(VOID) && !env.info.returnResult.pt.hasTag(NONE)) { env.info.returnResult.checkContext.report(tree.pos(), - diags.fragment("missing.ret.val")); + diags.fragment(Fragments.MissingRetVal(env.info.returnResult.pt))); } } result = null; @@ -1834,7 +1834,7 @@ Type site = env.enclClass.sym.type; if (methName == names._super) { if (site == syms.objectType) { - log.error(tree.meth.pos(), "no.superclass", site); + log.error(tree.meth.pos(), Errors.NoSuperclass(site)); site = types.createErrorType(syms.objectType); } else { site = types.supertype(site); @@ -1865,8 +1865,8 @@ localEnv, site, true); } } else if (tree.meth.hasTag(SELECT)) { - log.error(tree.meth.pos(), "illegal.qual.not.icls", - site.tsym); + log.error(tree.meth.pos(), + Errors.IllegalQualNotIcls(site.tsym)); } // if we're calling a java.lang.Enum constructor, @@ -1968,8 +1968,8 @@ ((JCExpressionStatement) body.stats.head).expr == tree) return true; } - log.error(tree.pos(),"call.must.be.first.stmt.in.ctor", - TreeInfo.name(tree.meth)); + log.error(tree.pos(), + Errors.CallMustBeFirstStmtInCtor(TreeInfo.name(tree.meth))); return false; } @@ -2080,9 +2080,9 @@ } if (!clazztype.isErroneous()) { if (cdef != null && clazztype.tsym.isInterface()) { - log.error(tree.encl.pos(), "anon.class.impl.intf.no.qual.for.new"); + log.error(tree.encl.pos(), Errors.AnonClassImplIntfNoQualForNew); } else if (clazztype.tsym.isStatic()) { - log.error(tree.encl.pos(), "qualified.new.of.static.class", clazztype.tsym); + log.error(tree.encl.pos(), Errors.QualifiedNewOfStaticClass(clazztype.tsym)); } } } else if (!clazztype.tsym.isInterface() && @@ -2105,7 +2105,7 @@ (!env.tree.hasTag(VARDEF) || (((JCVariableDecl) env.tree).mods.flags & Flags.ENUM) == 0 || ((JCVariableDecl) env.tree).init != tree)) - log.error(tree.pos(), "enum.cant.be.instantiated"); + log.error(tree.pos(), Errors.EnumCantBeInstantiated); boolean isSpeculativeDiamondInferenceRound = TreeInfo.isDiamond(tree) && resultInfo.checkContext.deferredAttrContext().mode == DeferredAttr.AttrMode.SPECULATIVE; @@ -2113,17 +2113,17 @@ // Check that class is not abstract if (cdef == null && !isSpeculativeDiamondInferenceRound && // class body may be nulled out in speculative tree copy (clazztype.tsym.flags() & (ABSTRACT | INTERFACE)) != 0) { - log.error(tree.pos(), "abstract.cant.be.instantiated", - clazztype.tsym); + log.error(tree.pos(), + Errors.AbstractCantBeInstantiated(clazztype.tsym)); skipNonDiamondPath = true; } else if (cdef != null && clazztype.tsym.isInterface()) { // Check that no constructor arguments are given to // anonymous classes implementing an interface if (!argtypes.isEmpty()) - log.error(tree.args.head.pos(), "anon.class.impl.intf.no.args"); + log.error(tree.args.head.pos(), Errors.AnonClassImplIntfNoArgs); if (!typeargtypes.isEmpty()) - log.error(tree.typeargs.head.pos(), "anon.class.impl.intf.no.typeargs"); + log.error(tree.typeargs.head.pos(), Errors.AnonClassImplIntfNoTypeargs); // Error recovery: pretend no arguments were supplied. argtypes = List.nil(); @@ -2342,7 +2342,7 @@ @Override public void report(DiagnosticPosition _unused, JCDiagnostic details) { enclosingContext.report(clazz.clazz, - diags.fragment("cant.apply.diamond.1", diags.fragment("diamond", tsym), details)); + diags.fragment(Fragments.CantApplyDiamond1(Fragments.Diamond(tsym), details))); } }; } @@ -2383,8 +2383,8 @@ elemtype = types.elemtype(pt()); } else { if (!pt().hasTag(ERROR)) { - log.error(tree.pos(), "illegal.initializer.for.type", - pt()); + log.error(tree.pos(), + Errors.IllegalInitializerForType(pt())); } elemtype = types.createErrorType(pt()); } @@ -2394,7 +2394,7 @@ owntype = new ArrayType(elemtype, syms.arrayClass); } if (!types.isReifiable(elemtype)) - log.error(tree.pos(), "generic.array.creation"); + log.error(tree.pos(), Errors.GenericArrayCreation); result = check(tree, owntype, KindSelector.VAL, resultInfo); } @@ -2409,7 +2409,7 @@ if (pt().isErroneous() || (pt().hasTag(NONE) && pt() != Type.recoveryType)) { if (pt().hasTag(NONE)) { //lambda only allowed in assignment or method invocation/cast context - log.error(that.pos(), "unexpected.lambda"); + log.error(that.pos(), Errors.UnexpectedLambda); } result = that.type = types.createErrorType(pt()); return; @@ -2443,8 +2443,10 @@ if (lambdaType.hasTag(FORALL)) { //lambda expression target desc cannot be a generic method - resultInfo.checkContext.report(that, diags.fragment("invalid.generic.lambda.target", - lambdaType, kindName(currentTarget.tsym), currentTarget.tsym)); + Fragment msg = Fragments.InvalidGenericLambdaTarget(lambdaType, + kindName(currentTarget.tsym), + currentTarget.tsym); + resultInfo.checkContext.report(that, diags.fragment(msg)); result = that.type = types.createErrorType(pt()); return; } @@ -2477,7 +2479,7 @@ attribStats(that.params, localEnv); if (arityMismatch) { - resultInfo.checkContext.report(that, diags.fragment("incompatible.arg.types.in.lambda")); + resultInfo.checkContext.report(that, diags.fragment(Fragments.IncompatibleArgTypesInLambda)); result = that.type = types.createErrorType(currentTarget); return; } @@ -2576,8 +2578,10 @@ } if (that.hasTag(LAMBDA) && lambdaType.hasTag(FORALL)) { //lambda expression target desc cannot be a generic method - resultInfo.checkContext.report(that, diags.fragment("invalid.generic.lambda.target", - lambdaType, kindName(currentTarget.tsym), currentTarget.tsym)); + Fragment msg = Fragments.InvalidGenericLambdaTarget(lambdaType, + kindName(currentTarget.tsym), + currentTarget.tsym); + resultInfo.checkContext.report(that, diags.fragment(msg)); currentTarget = types.createErrorType(pt()); } return new TargetInfo(currentTarget, lambdaType); @@ -2640,8 +2644,8 @@ } private void reportIntersectionError(DiagnosticPosition pos, String key, Object... args) { - resultInfo.checkContext.report(pos, diags.fragment("bad.intersection.target.for.functional.expr", - diags.fragment(key, args))); + resultInfo.checkContext.report(pos, + diags.fragment(Fragments.BadIntersectionTargetForFunctionalExpr(diags.fragment(key, args)))); } }; @@ -2703,7 +2707,7 @@ @Override public void report(DiagnosticPosition pos, JCDiagnostic details) { - enclosingContext.report(pos, diags.fragment("incompatible.ret.type.in.lambda", details)); + enclosingContext.report(pos, diags.fragment(Fragments.IncompatibleRetTypeInLambda(details))); } } @@ -2764,13 +2768,15 @@ //the descriptor's return type must be void if (tree.getBodyKind() == JCLambda.BodyKind.STATEMENT && tree.canCompleteNormally && !returnType.hasTag(VOID) && returnType != Type.recoveryType) { - checkContext.report(tree, diags.fragment("incompatible.ret.type.in.lambda", - diags.fragment("missing.ret.val", returnType))); + Fragment msg = + Fragments.IncompatibleRetTypeInLambda(Fragments.MissingRetVal(returnType)); + checkContext.report(tree, + diags.fragment(msg)); } List argTypes = checkContext.inferenceContext().asUndetVars(descriptor.getParameterTypes()); if (!types.isSameTypes(argTypes, TreeInfo.types(tree.params))) { - checkContext.report(tree, diags.fragment("incompatible.arg.types.in.lambda")); + checkContext.report(tree, diags.fragment(Fragments.IncompatibleArgTypesInLambda)); } } @@ -2841,7 +2847,7 @@ if (pt().isErroneous() || (pt().hasTag(NONE) && pt() != Type.recoveryType)) { if (pt().hasTag(NONE)) { //method reference only allowed in assignment or method invocation/cast context - log.error(that.pos(), "unexpected.mref"); + log.error(that.pos(), Errors.UnexpectedMref); } result = that.type = types.createErrorType(pt()); return; @@ -2857,8 +2863,9 @@ if (!exprType.isErroneous() && exprType.isRaw() && that.typeargs != null) { - log.error(that.expr.pos(), "invalid.mref", Kinds.kindName(that.getMode()), - diags.fragment("mref.infer.and.explicit.params")); + log.error(that.expr.pos(), + Errors.InvalidMref(Kinds.kindName(that.getMode()), + Fragments.MrefInferAndExplicitParams)); exprType = types.createErrorType(exprType); } } @@ -2990,8 +2997,9 @@ if (that.sym.isStatic() && TreeInfo.isStaticSelector(that.expr, names) && exprType.getTypeArguments().nonEmpty()) { //static ref with class type-args - log.error(that.expr.pos(), "invalid.mref", Kinds.kindName(that.getMode()), - diags.fragment("static.mref.with.targs")); + log.error(that.expr.pos(), + Errors.InvalidMref(Kinds.kindName(that.getMode()), + Fragments.StaticMrefWithTargs)); result = that.type = types.createErrorType(currentTarget); return; } @@ -3088,8 +3096,9 @@ } if (incompatibleReturnType != null) { - checkContext.report(tree, diags.fragment("incompatible.ret.type.in.mref", - diags.fragment("inconvertible.types", resType, descriptor.getReturnType()))); + Fragment msg = + Fragments.IncompatibleRetTypeInMref(Fragments.InconvertibleTypes(resType, descriptor.getReturnType())); + checkContext.report(tree, diags.fragment(msg)); } else { if (inferenceContext.free(refType)) { // we need to wait for inference to finish and then replace inference vars in the referent type @@ -3105,7 +3114,7 @@ if (!speculativeAttr) { List thrownTypes = inferenceContext.asUndetVars(descriptor.getThrownTypes()); if (chk.unhandled(refType.getThrownTypes(), thrownTypes).nonEmpty()) { - log.error(tree, "incompatible.thrown.types.in.mref", refType.getThrownTypes()); + log.error(tree, Errors.IncompatibleThrownTypesInMref(refType.getThrownTypes())); } //18.2.5: "In addition, for all j (1 <= j <= n), the constraint reduces to the bound throws Ej" thrownTypes.stream() @@ -3176,7 +3185,7 @@ result = check(tree, owntype, pkind(), resultInfo); Symbol sym = TreeInfo.symbol(tree); if (sym != null && sym.kind.matches(KindSelector.TYP_PCK)) - log.error(tree.pos(), "illegal.start.of.type"); + log.error(tree.pos(), Errors.IllegalStartOfType); } public void visitAssign(JCAssign tree) { @@ -3255,7 +3264,7 @@ // comparisons will not have an acmp* opc at this point. if ((opc == ByteCodes.if_acmpeq || opc == ByteCodes.if_acmpne)) { if (!types.isCastable(left, right, new Warner(tree.pos()))) { - log.error(tree.pos(), "incomparable.types", left, right); + log.error(tree.pos(), Errors.IncomparableTypes(left, right)); } } @@ -3304,7 +3313,7 @@ clazztype = chk.checkClassOrArrayType(tree.clazz.pos(), clazztype); } if (!clazztype.isErroneous() && !types.isReifiable(clazztype)) { - log.error(tree.clazz.pos(), "illegal.generic.type.for.instof"); + log.error(tree.clazz.pos(), Errors.IllegalGenericTypeForInstof); clazztype = types.createErrorType(clazztype); } chk.validate(tree.clazz, env, false); @@ -3319,7 +3328,7 @@ if (types.isArray(atype)) owntype = types.elemtype(atype); else if (!atype.hasTag(ERROR)) - log.error(tree.pos(), "array.req.but.found", atype); + log.error(tree.pos(), Errors.ArrayReqButFound(atype)); if (!pkind().contains(KindSelector.VAL)) owntype = capture(owntype); result = check(tree, owntype, KindSelector.VAR, resultInfo); @@ -3432,7 +3441,7 @@ while (elt.hasTag(ARRAY)) elt = ((ArrayType)elt).elemtype; if (elt.hasTag(TYPEVAR)) { - log.error(tree.pos(), "type.var.cant.be.deref"); + log.error(tree.pos(), Errors.TypeVarCantBeDeref); result = tree.type = types.createErrorType(tree.name, site.tsym, site); tree.sym = tree.type.tsym; return ; @@ -3452,7 +3461,7 @@ env.info.pendingResolutionPhase = null; Symbol sym = selectSym(tree, sitesym, site, env, resultInfo); if (sym.kind == VAR && sym.name != names._super && env.info.defaultSuperCallSite != null) { - log.error(tree.selected.pos(), "not.encl.class", site.tsym); + log.error(tree.selected.pos(), Errors.NotEnclClass(site.tsym)); sym = syms.errSymbol; } if (sym.exists() && !isType(sym) && pkind().contains(KindSelector.TYP_PCK)) { @@ -3487,7 +3496,7 @@ sym.name.equals(names.close) && sym.overrides(syms.autoCloseableClose, sitesym.type.tsym, types, true) && env.info.lint.isEnabled(LintCategory.TRY)) { - log.warning(LintCategory.TRY, tree, "try.explicit.close.call"); + log.warning(LintCategory.TRY, tree, Warnings.TryExplicitCloseCall); } // Disallow selecting a type from an expression @@ -3517,7 +3526,7 @@ } if (!allowStaticInterfaceMethods && sitesym.isInterface() && sym.isStatic() && sym.kind == MTH) { - log.error(DiagnosticFlag.SOURCE_LEVEL, tree.pos(), "static.intf.method.invoke.not.supported.in.source", sourceName); + log.error(DiagnosticFlag.SOURCE_LEVEL, tree.pos(), Errors.StaticIntfMethodInvokeNotSupportedInSource(sourceName)); } } else if (sym.kind != ERR && (sym.flags() & STATIC) != 0 && @@ -3602,7 +3611,7 @@ ? selectSym(tree, location, capture(site.getUpperBound()), env, resultInfo) : null; if (sym == null) { - log.error(pos, "type.var.cant.be.deref"); + log.error(pos, Errors.TypeVarCantBeDeref); return syms.errSymbol; } else { Symbol sym2 = (sym.flags() & Flags.PRIVATE) != 0 ? @@ -3626,7 +3635,7 @@ return new VarSymbol( STATIC | PUBLIC | FINAL, names._class, t, site.tsym); } else { - log.error(pos, "cant.deref", site); + log.error(pos, Errors.CantDeref(site)); return syms.errSymbol; } } @@ -3926,7 +3935,7 @@ if (!Resolve.isInitializer(env)) return; - log.error(tree.pos(), "illegal.enum.static.ref"); + log.error(tree.pos(), Errors.IllegalEnumStaticRef); } } @@ -3973,8 +3982,8 @@ if (icand_sup.nonEmpty() && icand_sup.head != sym && icand_sup.head.overrides(sym, icand_sup.head.enclClass(), types, true)) { - log.error(env.tree.pos(), "illegal.default.super.call", env.info.defaultSuperCallSite, - diags.fragment("overridden.default", sym, sup)); + log.error(env.tree.pos(), + Errors.IllegalDefaultSuperCall(env.info.defaultSuperCallSite, Fragments.OverriddenDefault(sym, sup))); break; } } @@ -3985,7 +3994,7 @@ JCMethodInvocation app = (JCMethodInvocation)env.tree; if (app.meth.hasTag(SELECT) && !TreeInfo.isStaticSelector(((JCFieldAccess)app.meth).selected, names)) { - log.error(env.tree.pos(), "illegal.static.intf.meth.call", site); + log.error(env.tree.pos(), Errors.IllegalStaticIntfMethCall(site)); } } @@ -4130,10 +4139,10 @@ clazztype.getMetadata()); } else { if (formals.length() != 0) { - log.error(tree.pos(), "wrong.number.type.args", - Integer.toString(formals.length())); + log.error(tree.pos(), + Errors.WrongNumberTypeArgs(Integer.toString(formals.length()))); } else { - log.error(tree.pos(), "type.doesnt.take.params", clazztype.tsym); + log.error(tree.pos(), Errors.TypeDoesntTakeParams(clazztype.tsym)); } owntype = types.createErrorType(tree.type); } @@ -4160,7 +4169,7 @@ //assume 'a' <: 'b' Type a = sub ? ctype : t; Type b = sub ? t : ctype; - log.error(typeTree.pos(), "multicatch.types.must.be.disjoint", a, b); + log.error(typeTree.pos(), Errors.MulticatchTypesMustBeDisjoint(a, b)); } } } @@ -4216,7 +4225,7 @@ // if first bound was a typevar, do not accept further bounds. if (bounds.tail.nonEmpty()) { log.error(bounds.tail.head.pos(), - "type.var.may.not.be.followed.by.other.bounds"); + Errors.TypeVarMayNotBeFollowedByOtherBounds); return bounds.head.type; } } else { @@ -4438,13 +4447,13 @@ // java.lang.Enum may not be subclassed by a non-enum if (st.tsym == syms.enumSym && ((c.flags_field & (Flags.ENUM|Flags.COMPOUND)) == 0)) - log.error(env.tree.pos(), "enum.no.subclassing"); + log.error(env.tree.pos(), Errors.EnumNoSubclassing); // Enums may not be extended by source-level classes if (st.tsym != null && ((st.tsym.flags_field & Flags.ENUM) != 0) && ((c.flags_field & (Flags.ENUM | Flags.COMPOUND)) == 0)) { - log.error(env.tree.pos(), "enum.types.not.extensible"); + log.error(env.tree.pos(), Errors.EnumTypesNotExtensible); } if (isSerializable(c.type)) { @@ -4510,10 +4519,11 @@ if ((c.flags() & ANNOTATION) != 0) { if (tree.implementing.nonEmpty()) log.error(tree.implementing.head.pos(), - "cant.extend.intf.annotation"); - if (tree.typarams.nonEmpty()) + Errors.CantExtendIntfAnnotation); + if (tree.typarams.nonEmpty()) { log.error(tree.typarams.head.pos(), - "intf.annotation.cant.have.type.params"); + Errors.IntfAnnotationCantHaveTypeParams(c)); + } // If this annotation type has a @Repeatable, validate Attribute.Compound repeatable = c.getAnnotationTypeMetadata().getRepeatable(); @@ -4548,7 +4558,7 @@ // Check that a generic class doesn't extend Throwable if (!c.type.allparams().isEmpty() && types.isSubtype(c.type, syms.throwableType)) - log.error(tree.extending.pos(), "generic.throwable"); + log.error(tree.extending.pos(), Errors.GenericThrowable); // Check that all methods which implement some // method conform to the method they implement. @@ -4570,7 +4580,7 @@ if (sym == null || sym.kind != VAR || ((VarSymbol) sym).getConstValue() == null) - log.error(l.head.pos(), "icls.cant.have.static.decl", c); + log.error(l.head.pos(), Errors.IclsCantHaveStaticDecl(c)); } } @@ -4643,7 +4653,7 @@ if (svuid == null) { log.warning(LintCategory.SERIAL, - tree.pos(), "missing.SVUID", c); + tree.pos(), Warnings.MissingSVUID(c)); return; } @@ -4651,17 +4661,17 @@ if ((svuid.flags() & (STATIC | FINAL)) != (STATIC | FINAL)) log.warning(LintCategory.SERIAL, - TreeInfo.diagnosticPositionFor(svuid, tree), "improper.SVUID", c); + TreeInfo.diagnosticPositionFor(svuid, tree), Warnings.ImproperSVUID(c)); // check that it is long else if (!svuid.type.hasTag(LONG)) log.warning(LintCategory.SERIAL, - TreeInfo.diagnosticPositionFor(svuid, tree), "long.SVUID", c); + TreeInfo.diagnosticPositionFor(svuid, tree), Warnings.LongSVUID(c)); // check constant else if (svuid.getConstValue() == null) log.warning(LintCategory.SERIAL, - TreeInfo.diagnosticPositionFor(svuid, tree), "constant.SVUID", c); + TreeInfo.diagnosticPositionFor(svuid, tree), Warnings.ConstantSVUID(c)); } private Type capture(Type type) { @@ -4831,13 +4841,13 @@ JCAnnotatedType at = (JCTree.JCAnnotatedType) enclTr; if (enclTy == null || enclTy.hasTag(NONE)) { if (at.getAnnotations().size() == 1) { - log.error(at.underlyingType.pos(), "cant.type.annotate.scoping.1", at.getAnnotations().head.attribute); + log.error(at.underlyingType.pos(), Errors.CantTypeAnnotateScoping1(at.getAnnotations().head.attribute)); } else { ListBuffer comps = new ListBuffer<>(); for (JCAnnotation an : at.getAnnotations()) { comps.add(an.attribute); } - log.error(at.underlyingType.pos(), "cant.type.annotate.scoping", comps.toList()); + log.error(at.underlyingType.pos(), Errors.CantTypeAnnotateScoping(comps.toList())); } repeat = false; } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Jun 15 13:44:42 2017 +0200 @@ -42,6 +42,7 @@ import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; +import com.sun.tools.javac.util.JCDiagnostic.Fragment; import com.sun.tools.javac.util.List; import com.sun.tools.javac.code.Lint; @@ -269,7 +270,7 @@ */ void warnDivZero(DiagnosticPosition pos) { if (lint.isEnabled(LintCategory.DIVZERO)) - log.warning(LintCategory.DIVZERO, pos, "div.zero"); + log.warning(LintCategory.DIVZERO, pos, Warnings.DivZero); } /** @@ -288,7 +289,7 @@ * @param ex The failure to report. */ public Type completionError(DiagnosticPosition pos, CompletionFailure ex) { - log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, pos, "cant.access", ex.sym, ex.getDetailValue()); + log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, pos, Errors.CantAccess(ex.sym, ex.getDetailValue())); if (ex instanceof ClassFinder.BadClassFile) throw new Abort(); else return syms.errType; } @@ -299,14 +300,14 @@ * required. * @param found The type that was found. */ - Type typeTagError(DiagnosticPosition pos, Object required, Object found) { + Type typeTagError(DiagnosticPosition pos, JCDiagnostic required, Object found) { // this error used to be raised by the parser, // but has been delayed to this point: if (found instanceof Type && ((Type)found).hasTag(VOID)) { - log.error(pos, "illegal.start.of.type"); + log.error(pos, Errors.IllegalStartOfType); return syms.errType; } - log.error(pos, "type.found.req", found, required); + log.error(pos, Errors.TypeFoundReq(found, required)); return types.createErrorType(found instanceof Type ? (Type)found : syms.errType); } @@ -316,7 +317,7 @@ * @param sym The referenced symbol. */ void earlyRefError(DiagnosticPosition pos, Symbol sym) { - log.error(pos, "cant.ref.before.ctor.called", sym); + log.error(pos, Errors.CantRefBeforeCtorCalled(sym)); } /** Report duplicate declaration error. @@ -326,12 +327,18 @@ Symbol location = sym.location(); if (location.kind == MTH && ((MethodSymbol)location).isStaticOrInstanceInit()) { - log.error(pos, "already.defined.in.clinit", kindName(sym), sym, - kindName(sym.location()), kindName(sym.location().enclClass()), - sym.location().enclClass()); + log.error(pos, + Errors.AlreadyDefinedInClinit(kindName(sym), + sym, + kindName(sym.location()), + kindName(sym.location().enclClass()), + sym.location().enclClass())); } else { - log.error(pos, "already.defined", kindName(sym), sym, - kindName(sym.location()), sym.location()); + log.error(pos, + Errors.AlreadyDefined(kindName(sym), + sym, + kindName(sym.location()), + sym.location())); } } } @@ -340,7 +347,7 @@ */ void varargsDuplicateError(DiagnosticPosition pos, Symbol sym1, Symbol sym2) { if (!sym1.type.isErroneous() && !sym2.type.isErroneous()) { - log.error(pos, "array.and.varargs", sym1, sym2, sym2.location()); + log.error(pos, Errors.ArrayAndVarargs(sym1, sym2, sym2.location())); } } @@ -530,7 +537,7 @@ */ CheckContext basicHandler = new CheckContext() { public void report(DiagnosticPosition pos, JCDiagnostic details) { - log.error(pos, "prob.found.req", details); + log.error(pos, Errors.ProbFoundReq(details)); } public boolean compatible(Type found, Type req, Warner warn) { return types.isAssignable(found, req, warn); @@ -578,10 +585,10 @@ return found; } else { if (found.isNumeric() && req.isNumeric()) { - checkContext.report(pos, diags.fragment("possible.loss.of.precision", found, req)); + checkContext.report(pos, diags.fragment(Fragments.PossibleLossOfPrecision(found, req))); return types.createErrorType(found); } - checkContext.report(pos, diags.fragment("inconvertible.types", found, req)); + checkContext.report(pos, diags.fragment(Fragments.InconvertibleTypes(found, req))); return types.createErrorType(found); } } @@ -599,7 +606,7 @@ if (types.isCastable(found, req, castWarner(pos, found, req))) { return req; } else { - checkContext.report(pos, diags.fragment("inconvertible.types", found, req)); + checkContext.report(pos, diags.fragment(Fragments.InconvertibleTypes(found, req))); return types.createErrorType(found); } } @@ -615,7 +622,7 @@ deferredLintHandler.report(() -> { if (lint.isEnabled(LintCategory.CAST)) log.warning(LintCategory.CAST, - tree.pos(), "redundant.cast", tree.clazz.type); + tree.pos(), Warnings.RedundantCast(tree.clazz.type)); }); } } @@ -662,7 +669,7 @@ */ Type checkNonVoid(DiagnosticPosition pos, Type t) { if (t.hasTag(VOID)) { - log.error(pos, "void.not.allowed.here"); + log.error(pos, Errors.VoidNotAllowedHere); return types.createErrorType(t); } else { return t; @@ -672,7 +679,7 @@ Type checkClassOrArrayType(DiagnosticPosition pos, Type t) { if (!t.hasTag(CLASS) && !t.hasTag(ARRAY) && !t.hasTag(ERROR)) { return typeTagError(pos, - diags.fragment("type.req.class.array"), + diags.fragment(Fragments.TypeReqClassArray), asTypeParam(t)); } else { return t; @@ -686,7 +693,7 @@ Type checkClassType(DiagnosticPosition pos, Type t) { if (!t.hasTag(CLASS) && !t.hasTag(ERROR)) { return typeTagError(pos, - diags.fragment("type.req.class"), + diags.fragment(Fragments.TypeReqClass), asTypeParam(t)); } else { return t; @@ -695,7 +702,7 @@ //where private Object asTypeParam(Type t) { return (t.hasTag(TYPEVAR)) - ? diags.fragment("type.parameter", t) + ? diags.fragment(Fragments.TypeParameter(t)) : t; } @@ -705,17 +712,17 @@ t = checkClassOrArrayType(pos, t); if (t.hasTag(CLASS)) { if ((t.tsym.flags() & (ABSTRACT | INTERFACE)) != 0) { - log.error(pos, "abstract.cant.be.instantiated", t.tsym); + log.error(pos, Errors.AbstractCantBeInstantiated(t.tsym)); t = types.createErrorType(t); } else if ((t.tsym.flags() & ENUM) != 0) { - log.error(pos, "enum.cant.be.instantiated"); + log.error(pos, Errors.EnumCantBeInstantiated); t = types.createErrorType(t); } else { t = checkClassType(pos, t, true); } } else if (t.hasTag(ARRAY)) { if (!types.isReifiable(((ArrayType)t).elemtype)) { - log.error(pos, "generic.array.creation"); + log.error(pos, Errors.GenericArrayCreation); t = types.createErrorType(t); } } @@ -734,7 +741,7 @@ while (args.nonEmpty()) { if (args.head.hasTag(WILDCARD)) return typeTagError(pos, - diags.fragment("type.req.exact"), + diags.fragment(Fragments.TypeReqExact), args.head); args = args.tail; } @@ -752,7 +759,7 @@ return t; else return typeTagError(pos, - diags.fragment("type.req.ref"), + diags.fragment(Fragments.TypeReqRef), t); } @@ -779,7 +786,7 @@ return t; else return typeTagError(pos, - diags.fragment("type.req.ref"), + diags.fragment(Fragments.TypeReqRef), t); } @@ -793,9 +800,8 @@ boolean checkDisjoint(DiagnosticPosition pos, long flags, long set1, long set2) { if ((flags & set1) != 0 && (flags & set2) != 0) { log.error(pos, - "illegal.combination.of.modifiers", - asFlagSet(TreeInfo.firstFlag(flags & set1)), - asFlagSet(TreeInfo.firstFlag(flags & set2))); + Errors.IllegalCombinationOfModifiers(asFlagSet(TreeInfo.firstFlag(flags & set1)), + asFlagSet(TreeInfo.firstFlag(flags & set2)))); return false; } else return true; @@ -815,14 +821,14 @@ } if (t.tsym.type.getTypeArguments().isEmpty()) { log.error(tree.clazz.pos(), - "cant.apply.diamond.1", - t, diags.fragment("diamond.non.generic", t)); + Errors.CantApplyDiamond1(t, + Fragments.DiamondNonGeneric(t))); return types.createErrorType(t); } else if (tree.typeargs != null && tree.typeargs.nonEmpty()) { log.error(tree.clazz.pos(), - "cant.apply.diamond.1", - t, diags.fragment("diamond.and.explicit.params", t)); + Errors.CantApplyDiamond1(t, + Fragments.DiamondAndExplicitParams(t))); return types.createErrorType(t); } else { return t; @@ -905,24 +911,23 @@ } if (hasTrustMeAnno && !isTrustMeAllowedOnMethod(m)) { if (varargElemType != null) { + JCDiagnostic msg = allowPrivateSafeVarargs ? + diags.fragment(Fragments.VarargsTrustmeOnVirtualVarargs(m)) : + diags.fragment(Fragments.VarargsTrustmeOnVirtualVarargsFinalOnly(m)); log.error(tree, - "varargs.invalid.trustme.anno", - syms.trustMeType.tsym, - allowPrivateSafeVarargs ? - diags.fragment("varargs.trustme.on.virtual.varargs", m) : - diags.fragment("varargs.trustme.on.virtual.varargs.final.only", m)); + Errors.VarargsInvalidTrustmeAnno(syms.trustMeType.tsym, + msg)); } else { log.error(tree, - "varargs.invalid.trustme.anno", - syms.trustMeType.tsym, - diags.fragment("varargs.trustme.on.non.varargs.meth", m)); + Errors.VarargsInvalidTrustmeAnno(syms.trustMeType.tsym, + Fragments.VarargsTrustmeOnNonVarargsMeth(m))); } } else if (hasTrustMeAnno && varargElemType != null && types.isReifiable(varargElemType)) { warnUnsafeVararg(tree, "varargs.redundant.trustme.anno", syms.trustMeType.tsym, - diags.fragment("varargs.trustme.on.reifiable.varargs", varargElemType)); + diags.fragment(Fragments.VarargsTrustmeOnReifiableVarargs(varargElemType))); } else if (!hasTrustMeAnno && varargElemType != null && !types.isReifiable(varargElemType)) { @@ -986,8 +991,8 @@ Type lastArg = argtypes.last(); if (types.isSubtypeUnchecked(lastArg, types.elemtype(varParam)) && !types.isSameType(types.erasure(varParam), types.erasure(lastArg))) - log.warning(argtrees.last().pos(), "inexact.non-varargs.call", - types.elemtype(varParam), varParam); + log.warning(argtrees.last().pos(), + Warnings.InexactNonVarargsCall(types.elemtype(varParam),varParam)); } } if (useVarargs) { @@ -1172,14 +1177,14 @@ mask = LocalClassFlags; if ((sym.owner.flags_field & STATIC) == 0 && (flags & ENUM) != 0) - log.error(pos, "enums.must.be.static"); + log.error(pos, Errors.EnumsMustBeStatic); } else if (sym.owner.kind == TYP) { mask = MemberClassFlags; if (sym.owner.owner.kind == PCK || (sym.owner.flags_field & STATIC) != 0) mask |= STATIC; else if ((flags & ENUM) != 0) - log.error(pos, "enums.must.be.static"); + log.error(pos, Errors.EnumsMustBeStatic); // Nested interfaces and enums are always STATIC (Spec ???) if ((flags & (INTERFACE | ENUM)) != 0 ) implicit = STATIC; } else { @@ -1202,12 +1207,12 @@ long illegal = flags & ExtendedStandardFlags & ~mask; if (illegal != 0) { if ((illegal & INTERFACE) != 0) { - log.error(pos, "intf.not.allowed.here"); + log.error(pos, Errors.IntfNotAllowedHere); mask |= INTERFACE; } else { log.error(pos, - "mod.not.allowed.here", asFlagSet(illegal)); + Errors.ModNotAllowedHere(asFlagSet(illegal))); } } else if ((sym.kind == TYP || @@ -1346,7 +1351,7 @@ if (incompatibleArg != null) { for (JCTree arg : tree.arguments) { if (arg.type == incompatibleArg) { - log.error(arg, "not.within.bounds", incompatibleArg, forms.head); + log.error(arg, Errors.NotWithinBounds(incompatibleArg, forms.head)); } forms = forms.tail; } @@ -1369,7 +1374,7 @@ // Check that this type is either fully parameterized, or // not parameterized at all. if (tree.type.getEnclosingType().isRaw()) - log.error(tree.pos(), "improperly.formed.type.inner.raw.param"); + log.error(tree.pos(), Errors.ImproperlyFormedTypeInnerRawParam); if (tree.clazz.hasTag(SELECT)) visitSelectInternal((JCFieldAccess)tree.clazz); } @@ -1395,7 +1400,7 @@ // Check that this type is either fully parameterized, or // not parameterized at all. if (tree.selected.type.isParameterized() && tree.type.tsym.type.getTypeArguments().nonEmpty()) - log.error(tree.pos(), "improperly.formed.type.param.missing"); + log.error(tree.pos(), Errors.ImproperlyFormedTypeParamMissing); } } @@ -1405,7 +1410,7 @@ // The enclosing type is not a class, so we are // looking at a static member type. However, the // qualifying expression is parameterized. - log.error(tree.pos(), "cant.select.static.class.from.param.type"); + log.error(tree.pos(), Errors.CantSelectStaticClassFromParamType); } else { // otherwise validate the rest of the expression tree.selected.accept(this); @@ -1420,7 +1425,7 @@ @Override public void visitTypeIdent(JCPrimitiveTypeTree that) { if (that.type.hasTag(TypeTag.VOID)) { - log.error(that.pos(), "void.not.allowed.here"); + log.error(that.pos(), Errors.VoidNotAllowedHere); } super.visitTypeIdent(that); } @@ -1462,7 +1467,7 @@ !withinAnonConstr(env) && tree.type.isRaw()) { log.warning(LintCategory.RAW, - tree.pos(), "raw.class.use", tree.type, tree.type.tsym.type); + tree.pos(), Warnings.RawClassUse(tree.type, tree.type.tsym.type)); } } //where @@ -1613,15 +1618,16 @@ * @param other The overridden method. * @return An internationalized string. */ - Object cannotOverride(MethodSymbol m, MethodSymbol other) { - String key; + Fragment cannotOverride(MethodSymbol m, MethodSymbol other) { + Symbol mloc = m.location(); + Symbol oloc = other.location(); + if ((other.owner.flags() & INTERFACE) == 0) - key = "cant.override"; + return Fragments.CantOverride(m, mloc, other, oloc); else if ((m.owner.flags() & INTERFACE) == 0) - key = "cant.implement"; + return Fragments.CantImplement(m, mloc, other, oloc); else - key = "clashes.with"; - return diags.fragment(key, m, m.location(), other, other.location()); + return Fragments.ClashesWith(m, mloc, other, oloc); } /** A customized "override" warning message. @@ -1629,15 +1635,16 @@ * @param other The overridden method. * @return An internationalized string. */ - Object uncheckedOverrides(MethodSymbol m, MethodSymbol other) { - String key; + Fragment uncheckedOverrides(MethodSymbol m, MethodSymbol other) { + Symbol mloc = m.location(); + Symbol oloc = other.location(); + if ((other.owner.flags() & INTERFACE) == 0) - key = "unchecked.override"; + return Fragments.UncheckedOverride(m, mloc, other, oloc); else if ((m.owner.flags() & INTERFACE) == 0) - key = "unchecked.implement"; + return Fragments.UncheckedImplement(m, mloc, other, oloc); else - key = "unchecked.clash.with"; - return diags.fragment(key, m, m.location(), other, other.location()); + return Fragments.UncheckedClashWith(m, mloc, other, oloc); } /** A customized "override" warning message. @@ -1645,15 +1652,16 @@ * @param other The overridden method. * @return An internationalized string. */ - Object varargsOverrides(MethodSymbol m, MethodSymbol other) { - String key; + Fragment varargsOverrides(MethodSymbol m, MethodSymbol other) { + Symbol mloc = m.location(); + Symbol oloc = other.location(); + if ((other.owner.flags() & INTERFACE) == 0) - key = "varargs.override"; + return Fragments.VarargsOverride(m, mloc, other, oloc); else if ((m.owner.flags() & INTERFACE) == 0) - key = "varargs.implement"; + return Fragments.VarargsImplement(m, mloc, other, oloc); else - key = "varargs.clash.with"; - return diags.fragment(key, m, m.location(), other, other.location()); + return Fragments.VarargsClashWith(m, mloc, other, oloc); } /** Check that this method conforms with overridden method 'other'. @@ -1689,8 +1697,8 @@ // Error if static method overrides instance method (JLS 8.4.6.2). if ((m.flags() & STATIC) != 0 && (other.flags() & STATIC) == 0) { - log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.static", - cannotOverride(m, other)); + log.error(TreeInfo.diagnosticPositionFor(m, tree), + Errors.OverrideStatic(cannotOverride(m, other))); m.flags_field |= BAD_OVERRIDE; return; } @@ -1700,9 +1708,9 @@ if ((other.flags() & FINAL) != 0 || (m.flags() & STATIC) == 0 && (other.flags() & STATIC) != 0) { - log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.meth", - cannotOverride(m, other), - asFlagSet(other.flags() & (FINAL | STATIC))); + log.error(TreeInfo.diagnosticPositionFor(m, tree), + Errors.OverrideMeth(cannotOverride(m, other), + asFlagSet(other.flags() & (FINAL | STATIC)))); m.flags_field |= BAD_OVERRIDE; return; } @@ -1714,11 +1722,12 @@ // Error if overriding method has weaker access (JLS 8.4.6.3). if (protection(m.flags()) > protection(other.flags())) { - log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.weaker.access", - cannotOverride(m, other), + log.error(TreeInfo.diagnosticPositionFor(m, tree), (other.flags() & AccessFlags) == 0 ? - "package" : - asFlagSet(other.flags() & AccessFlags)); + Errors.OverrideWeakerAccess(cannotOverride(m, other), + "package") : + Errors.OverrideWeakerAccess(cannotOverride(m, other), + asFlagSet(other.flags() & AccessFlags))); m.flags_field |= BAD_OVERRIDE; return; } @@ -1740,14 +1749,12 @@ if (!resultTypesOK) { if ((m.flags() & STATIC) != 0 && (other.flags() & STATIC) != 0) { log.error(TreeInfo.diagnosticPositionFor(m, tree), - Errors.OverrideIncompatibleRet(Fragments.CantHide(m, m.location(), other, + Errors.OverrideIncompatibleRet(Fragments.CantHide(m, m.location(), other, other.location()), mtres, otres)); m.flags_field |= BAD_OVERRIDE; } else { log.error(TreeInfo.diagnosticPositionFor(m, tree), - "override.incompatible.ret", - cannotOverride(m, other), - mtres, otres); + Errors.OverrideIncompatibleRet(cannotOverride(m, other), mtres, otres)); m.flags_field |= BAD_OVERRIDE; } return; @@ -1765,9 +1772,7 @@ List unhandledUnerased = unhandled(mt.getThrownTypes(), otthrown); if (unhandledErased.nonEmpty()) { log.error(TreeInfo.diagnosticPositionFor(m, tree), - "override.meth.doesnt.throw", - cannotOverride(m, other), - unhandledUnerased.head); + Errors.OverrideMethDoesntThrow(cannotOverride(m, other), unhandledUnerased.head)); m.flags_field |= BAD_OVERRIDE; return; } @@ -1784,15 +1789,14 @@ && lint.isEnabled(LintCategory.OVERRIDES)) { log.warning(TreeInfo.diagnosticPositionFor(m, tree), ((m.flags() & Flags.VARARGS) != 0) - ? "override.varargs.missing" - : "override.varargs.extra", - varargsOverrides(m, other)); + ? Warnings.OverrideVarargsMissing(varargsOverrides(m, other)) + : Warnings.OverrideVarargsExtra(varargsOverrides(m, other))); } // Warn if instance method overrides bridge method (compiler spec ??) if ((other.flags() & BRIDGE) != 0) { - log.warning(TreeInfo.diagnosticPositionFor(m, tree), "override.bridge", - uncheckedOverrides(m, other)); + log.warning(TreeInfo.diagnosticPositionFor(m, tree), + Warnings.OverrideBridge(uncheckedOverrides(m, other))); } // Warn if a deprecated method overridden by a non-deprecated one. @@ -1871,8 +1875,8 @@ continue; Type st2 = types.memberType(t2, s2); if (types.overrideEquivalent(st1, st2)) - log.error(pos, "concrete.inheritance.conflict", - s1, t1, s2, t2, sup); + log.error(pos, + Errors.ConcreteInheritanceConflict(s1, t1, s2, t2, sup)); } } } @@ -1971,9 +1975,8 @@ types.covariantReturnType(rt2, rt1, types.noWarnings)) || checkCommonOverriderIn(s1,s2,site); if (!compat) { - log.error(pos, "types.incompatible.diff.ret", - t1, t2, s2.name + - "(" + types.memberType(t2, s2).getParameterTypes() + ")"); + log.error(pos, Errors.TypesIncompatibleDiffRet(t1, t2, s2.name + + "(" + types.memberType(t2, s2).getParameterTypes() + ")")); return s2; } } else if (checkNameClash((ClassSymbol)site.tsym, s1, s2) && @@ -2017,7 +2020,7 @@ ClassSymbol origin = (ClassSymbol)m.owner; if ((origin.flags() & ENUM) != 0 && names.finalize.equals(m.name)) if (m.overrides(syms.enumFinalFinalize, origin, types, false)) { - log.error(tree.pos(), "enum.no.finalize"); + log.error(tree.pos(), Errors.EnumNoFinalize); return; } for (Type t = origin.type; t.hasTag(CLASS); @@ -2097,7 +2100,7 @@ if (overridesEquals && !overridesHashCode) { log.warning(LintCategory.OVERRIDES, pos, - "override.equals.but.not.hashcode", someClass); + Warnings.OverrideEqualsButNotHashcode(someClass)); } } } @@ -2154,8 +2157,8 @@ MethodSymbol undef1 = new MethodSymbol(undef.flags(), undef.name, types.memberType(c.type, undef), undef.owner); - log.error(pos, "does.not.override.abstract", - c, undef1, undef1.location()); + log.error(pos, + Errors.DoesNotOverrideAbstract(c, undef1, undef1.location())); } } @@ -2288,7 +2291,7 @@ if (seen.contains(t)) { tv = (TypeVar)t; tv.bound = types.createErrorType(t); - log.error(pos, "cyclic.inheritance", t); + log.error(pos, Errors.CyclicInheritance(t)); } else if (t.hasTag(TYPEVAR)) { tv = (TypeVar)t; seen = seen.prepend(tv); @@ -2340,7 +2343,7 @@ /** Note that we found an inheritance cycle. */ private void noteCyclic(DiagnosticPosition pos, ClassSymbol c) { - log.error(pos, "cyclic.inheritance", c); + log.error(pos, Errors.CyclicInheritance(c)); for (List l=types.interfaces(c.type); l.nonEmpty(); l=l.tail) l.head = types.createErrorType((ClassSymbol)l.head.tsym, Type.noType); Type st = types.supertype(c.type); @@ -2509,9 +2512,7 @@ if (!types.isSubSignature(sym.type, types.memberType(site, s), allowStrictMethodClashCheck)) { if (types.hasSameArgs(s.erasure(types), sym.erasure(types))) { log.error(pos, - "name.clash.same.erasure.no.hide", - sym, sym.location(), - s, s.location()); + Errors.NameClashSameErasureNoHide(sym, sym.location(), s, s.location())); return; } else { checkPotentiallyAmbiguousOverloads(pos, site, sym, (MethodSymbol)s); @@ -2647,9 +2648,9 @@ //this means a call site passing an implicit lambda would be ambigiuous msym1.flags_field |= POTENTIALLY_AMBIGUOUS; msym2.flags_field |= POTENTIALLY_AMBIGUOUS; - log.warning(LintCategory.OVERLOADS, pos, "potentially.ambiguous.overload", - msym1, msym1.location(), - msym2, msym2.location()); + log.warning(LintCategory.OVERLOADS, pos, + Warnings.PotentiallyAmbiguousOverload(msym1, msym1.location(), + msym2, msym2.location())); return; } } @@ -2679,11 +2680,11 @@ if (isLambda) { if (belongsToRestrictedPackage(sym)) { log.warning(LintCategory.SERIAL, tree.pos(), - "access.to.member.from.serializable.lambda", sym); + Warnings.AccessToMemberFromSerializableLambda(sym)); } } else { log.warning(tree.pos(), - "access.to.member.from.serializable.element", sym); + Warnings.AccessToMemberFromSerializableElement(sym)); } } } @@ -2715,7 +2716,7 @@ */ private void syntheticError(DiagnosticPosition pos, Symbol sym) { if (!sym.type.isErroneous()) { - log.error(pos, "synthetic.name.conflict", sym, sym.location()); + log.error(pos, Errors.SyntheticNameConflict(sym, sym.location())); } } @@ -2743,9 +2744,10 @@ List oldparams = oldit.allparams(); List newparams = it.allparams(); if (!types.containsTypeEquivalent(oldparams, newparams)) - log.error(pos, "cant.inherit.diff.arg", - it.tsym, Type.toString(oldparams), - Type.toString(newparams)); + log.error(pos, + Errors.CantInheritDiffArg(it.tsym, + Type.toString(oldparams), + Type.toString(newparams))); } checkClassBounds(pos, seensofar, it); } @@ -2758,7 +2760,7 @@ */ void checkNotRepeated(DiagnosticPosition pos, Type it, Set its) { if (its.contains(it)) - log.error(pos, "repeated.interface"); + log.error(pos, Errors.RepeatedInterface); else { its.add(it); } @@ -2808,7 +2810,7 @@ validateAnnotationType(pos, types.elemtype(type)); return; } - log.error(pos, "invalid.annotation.member.type"); + log.error(pos, Errors.InvalidAnnotationMemberType); } /** @@ -2826,7 +2828,7 @@ if (sym.kind == MTH && (sym.flags() & (PUBLIC | PROTECTED)) != 0 && types.overrideEquivalent(m.type, sym.type)) - log.error(pos, "intf.annotation.member.clash", sym, sup); + log.error(pos, Errors.IntfAnnotationMemberClash(sym, sup)); } } } @@ -2851,13 +2853,13 @@ validateAnnotationTree(a); if (a.type.tsym.isAnnotationType() && !annotationApplicable(a, s)) - log.error(a.pos(), "annotation.type.not.applicable"); + log.error(a.pos(), Errors.AnnotationTypeNotApplicable); if (a.annotationType.type.tsym == syms.functionalInterfaceType.tsym) { if (s.kind != TYP) { - log.error(a.pos(), "bad.functional.intf.anno"); + log.error(a.pos(), Errors.BadFunctionalIntfAnno); } else if (!s.isInterface() || (s.flags() & ANNOTATION) != 0) { - log.error(a.pos(), "bad.functional.intf.anno.1", diags.fragment("not.a.functional.intf", s)); + log.error(a.pos(), Errors.BadFunctionalIntfAnno1(Fragments.NotAFunctionalIntf(s))); } } } @@ -2911,11 +2913,13 @@ MethodSymbol m = (MethodSymbol) sym; Type ret = m.getReturnType(); if (!(ret.hasTag(ARRAY) && types.isSameType(((ArrayType)ret).elemtype, contained.type))) { - log.error(pos, "invalid.repeatable.annotation.value.return", - container, ret, types.makeArrayType(contained.type)); + log.error(pos, + Errors.InvalidRepeatableAnnotationValueReturn(container, + ret, + types.makeArrayType(contained.type))); } } else { - log.error(pos, "invalid.repeatable.annotation.no.value", container); + log.error(pos, Errors.InvalidRepeatableAnnotationNoValue(container)); } } @@ -2936,16 +2940,18 @@ } } if (error ) { - log.error(pos, "invalid.repeatable.annotation.retention", - container, containerRetention, - contained, containedRetention); + log.error(pos, + Errors.InvalidRepeatableAnnotationRetention(container, + containerRetention.name(), + contained, + containedRetention.name())); } } private void validateDocumented(Symbol container, Symbol contained, DiagnosticPosition pos) { if (contained.attribute(syms.documentedType.tsym) != null) { if (container.attribute(syms.documentedType.tsym) == null) { - log.error(pos, "invalid.repeatable.annotation.not.documented", container, contained); + log.error(pos, Errors.InvalidRepeatableAnnotationNotDocumented(container, contained)); } } } @@ -2953,7 +2959,7 @@ private void validateInherited(Symbol container, Symbol contained, DiagnosticPosition pos) { if (contained.attribute(syms.inheritedType.tsym) != null) { if (container.attribute(syms.inheritedType.tsym) == null) { - log.error(pos, "invalid.repeatable.annotation.not.inherited", container, contained); + log.error(pos, Errors.InvalidRepeatableAnnotationNotInherited(container, contained)); } } } @@ -2995,7 +3001,7 @@ } if (!isTargetSubsetOf(containerTargets, containedTargets)) { - log.error(pos, "invalid.repeatable.annotation.incompatible.target", container, contained); + log.error(pos, Errors.InvalidRepeatableAnnotationIncompatibleTarget(container, contained)); } } @@ -3058,9 +3064,7 @@ elm.kind == MTH && ((MethodSymbol)elm).defaultValue == null) { log.error(pos, - "invalid.repeatable.annotation.elem.nondefault", - container, - elm); + Errors.InvalidRepeatableAnnotationElemNondefault(container, elm)); } } } @@ -3209,8 +3213,8 @@ if (m == null || m.type.isErroneous()) continue; if (!elements.remove(m)) { isValid = false; - log.error(assign.lhs.pos(), "duplicate.annotation.member.value", - m.name, a.type); + log.error(assign.lhs.pos(), + Errors.DuplicateAnnotationMemberValue(m.name, a.type)); } } @@ -3256,7 +3260,7 @@ for (JCTree elem : na.elems) { if (!targets.add(TreeInfo.symbol(elem))) { isValid = false; - log.error(elem.pos(), "repeated.annotation.target"); + log.error(elem.pos(), Errors.RepeatedAnnotationTarget); } } return isValid; @@ -3268,13 +3272,13 @@ !syms.deprecatedType.isErroneous() && s.attribute(syms.deprecatedType.tsym) == null) { log.warning(LintCategory.DEP_ANN, - pos, "missing.deprecated.annotation"); + pos, Warnings.MissingDeprecatedAnnotation); } // Note: @Deprecated has no effect on local variables, parameters and package decls. if (lint.isEnabled(LintCategory.DEPRECATION) && !s.isDeprecatableViaAnnotation()) { if (!syms.deprecatedType.isErroneous() && s.attribute(syms.deprecatedType.tsym) != null) { log.warning(LintCategory.DEPRECATION, pos, - "deprecated.annotation.has.no.effect", Kinds.kindName(s)); + Warnings.DeprecatedAnnotationHasNoEffect(Kinds.kindName(s))); } } } @@ -3290,14 +3294,14 @@ void checkSunAPI(final DiagnosticPosition pos, final Symbol s) { if ((s.flags() & PROPRIETARY) != 0) { deferredLintHandler.report(() -> { - log.mandatoryWarning(pos, "sun.proprietary", s); + log.mandatoryWarning(pos, Warnings.SunProprietary(s)); }); } } void checkProfile(final DiagnosticPosition pos, final Symbol s) { if (profile != Profile.DEFAULT && (s.flags() & NOT_IN_PROFILE) != 0) { - log.error(pos, "not.in.profile", s, profile); + log.error(pos, Errors.NotInProfile(s, profile)); } } @@ -3327,7 +3331,7 @@ if ((tsym.flags_field & ACYCLIC_ANN) != 0) return; if ((tsym.flags_field & LOCKED) != 0) { - log.error(pos, "cyclic.annotation.element"); + log.error(pos, Errors.CyclicAnnotationElement(tsym)); return; } try { @@ -3395,7 +3399,7 @@ if (ctor != null && (ctor.flags_field & ACYCLIC) == 0) { if ((ctor.flags_field & LOCKED) != 0) { log.error(TreeInfo.diagnosticPositionFor(ctor, tree), - "recursive.ctor.invocation"); + Errors.RecursiveCtorInvocation); } else { ctor.flags_field |= LOCKED; checkCyclicConstructor(tree, callMap.remove(ctor), callMap); @@ -3433,7 +3437,7 @@ void checkEmptyIf(JCIf tree) { if (tree.thenpart.hasTag(SKIP) && tree.elsepart == null && lint.isEnabled(LintCategory.EMPTY)) - log.warning(LintCategory.EMPTY, tree.thenpart.pos(), "empty.if"); + log.warning(LintCategory.EMPTY, tree.thenpart.pos(), Warnings.EmptyIf); } /** Check that symbol is unique in given scope. @@ -3473,7 +3477,7 @@ */ void duplicateErasureError(DiagnosticPosition pos, Symbol sym1, Symbol sym2) { if (!sym1.type.isErroneous() && !sym2.type.isErroneous()) { - log.error(pos, "name.clash.same.erasure", sym1, sym2); + log.error(pos, Errors.NameClashSameErasure(sym1, sym2)); } } @@ -3531,14 +3535,14 @@ } if (clashing != null) { if (staticImport) - log.error(pos, "already.defined.static.single.import", clashing); + log.error(pos, Errors.AlreadyDefinedStaticSingleImport(clashing)); else - log.error(pos, "already.defined.single.import", clashing); + log.error(pos, Errors.AlreadyDefinedSingleImport(clashing)); return false; } clashing = topLevelScope.findFirst(sym.name, duplicates); if (clashing != null) { - log.error(pos, "already.defined.this.unit", clashing); + log.error(pos, Errors.AlreadyDefinedThisUnit(clashing)); return false; } return true; @@ -3548,8 +3552,8 @@ */ public void checkCanonical(JCTree tree) { if (!isCanonical(tree)) - log.error(tree.pos(), "import.requires.canonical", - TreeInfo.symbol(tree)); + log.error(tree.pos(), + Errors.ImportRequiresCanonical(TreeInfo.symbol(tree))); } // where private boolean isCanonical(JCTree tree) { @@ -3570,8 +3574,8 @@ rs.isAccessible(env, c) && !fileManager.isSameFile(c.sourcefile, env.toplevel.sourcefile)) { - log.warning(pos, "auxiliary.class.accessed.from.outside.of.its.source.file", - c, c.sourcefile); + log.warning(pos, + Warnings.AuxiliaryClassAccessedFromOutsideOfItsSourceFile(c, c.sourcefile)); } } @@ -3631,7 +3635,7 @@ break; } } - log.error(pos, "bad.functional.intf.anno.1", ex.getDiagnostic()); + log.error(pos, Errors.BadFunctionalIntfAnno1(ex.getDiagnostic())); } } } @@ -3647,11 +3651,14 @@ TypeSymbol site = (TypeSymbol) TreeInfo.symbol(select.selected); if (!checkTypeContainsImportableElement(site, site, toplevel.packge, select.name, new HashSet())) { - log.error(imp.pos(), "cant.resolve.location", - KindName.STATIC, - select.name, List.nil(), List.nil(), - Kinds.typeKindName(TreeInfo.symbol(select.selected).type), - TreeInfo.symbol(select.selected).type); + log.error(imp.pos(), + Errors.CantResolveLocation(KindName.STATIC, + select.name, + null, + null, + Fragments.Location(kindName(site), + site, + null))); } } } @@ -3672,7 +3679,7 @@ } } if (tsym.kind == PCK && tsym.members().isEmpty() && !tsym.exists()) { - log.error(DiagnosticFlag.RESOLVE_ERROR, imp.pos, "doesnt.exist", tsym); + log.error(DiagnosticFlag.RESOLVE_ERROR, imp.pos, Errors.DoesntExist(tsym)); } } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Thu Jun 15 13:44:42 2017 +0200 @@ -41,6 +41,7 @@ import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.comp.Attr.ResultInfo; import com.sun.tools.javac.comp.Resolve.MethodResolutionPhase; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType; import com.sun.tools.javac.util.Log.DeferredDiagnosticHandler; @@ -811,7 +812,7 @@ if (descriptorType.getParameterTypes().length() != tree.params.length()) { checkContext.report(tree, - diags.fragment("incompatible.arg.types.in.lambda")); + diags.fragment(Fragments.IncompatibleArgTypesInLambda)); } Type currentReturnType = descriptorType.getReturnType(); @@ -821,8 +822,7 @@ TreeInfo.isExpressionStatement((JCExpression)tree.getBody()); if (!isExpressionCompatible) { resultInfo.checkContext.report(tree.pos(), - diags.fragment("incompatible.ret.type.in.lambda", - diags.fragment("missing.ret.val", currentReturnType))); + diags.fragment(Fragments.IncompatibleRetTypeInLambda(Fragments.MissingRetVal(currentReturnType)))); } } else { LambdaBodyStructChecker lambdaBodyChecker = @@ -834,20 +834,19 @@ if (returnTypeIsVoid) { if (!isVoidCompatible) { resultInfo.checkContext.report(tree.pos(), - diags.fragment("unexpected.ret.val")); + diags.fragment(Fragments.UnexpectedRetVal)); } } else { boolean isValueCompatible = lambdaBodyChecker.isPotentiallyValueCompatible && !canLambdaBodyCompleteNormally(tree); if (!isValueCompatible && !isVoidCompatible) { log.error(tree.body.pos(), - "lambda.body.neither.value.nor.void.compatible"); + Errors.LambdaBodyNeitherValueNorVoidCompatible); } if (!isValueCompatible) { resultInfo.checkContext.report(tree.pos(), - diags.fragment("incompatible.ret.type.in.lambda", - diags.fragment("missing.ret.val", currentReturnType))); + diags.fragment(Fragments.IncompatibleRetTypeInLambda(Fragments.MissingRetVal(currentReturnType)))); } } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Thu Jun 15 13:44:42 2017 +0200 @@ -39,6 +39,7 @@ import com.sun.tools.javac.code.Type.*; import com.sun.tools.javac.main.Option.PkgInfo; import com.sun.tools.javac.resources.CompilerProperties.Errors; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.*; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.util.*; @@ -332,7 +333,7 @@ addEnv = true; } else if (pd.annotations.nonEmpty()) { log.error(pd.annotations.head.pos(), - "pkg.annotations.sb.in.package-info.java"); + Errors.PkgAnnotationsSbInPackageInfoJava); } } } else { @@ -363,8 +364,7 @@ JCCompilationUnit tree0 = env0.toplevel; if (!fileManager.isSameFile(tree.sourcefile, tree0.sourcefile)) { log.warning(pd != null ? pd.pid.pos() : null, - "pkg-info.already.seen", - tree.packge); + Warnings.PkgInfoAlreadySeen(tree.packge)); } } typeEnvs.put(tree.packge, packageEnv); @@ -409,7 +409,7 @@ topElement = KindName.INTERFACE; } log.error(tree.pos(), - "class.public.should.be.in.file", topElement, tree.name); + Errors.ClassPublicShouldBeInFile(topElement, tree.name)); } } else { if (!tree.name.isEmpty() && @@ -512,7 +512,7 @@ /** Complain about a duplicate class. */ protected void duplicateClass(DiagnosticPosition pos, ClassSymbol c) { - log.error(pos, "duplicate.class", c.fullname); + log.error(pos, Errors.DuplicateClass(c.fullname)); } /** Class enter visitor method for type parameters. diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Thu Jun 15 13:44:42 2017 +0200 @@ -32,6 +32,8 @@ import com.sun.source.tree.LambdaExpressionTree.BodyKind; import com.sun.tools.javac.code.*; import com.sun.tools.javac.code.Scope.WriteableScope; +import com.sun.tools.javac.resources.CompilerProperties.Errors; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.*; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; @@ -427,7 +429,7 @@ scanStat(tree); if (tree != null && tree.hasTag(JCTree.Tag.BLOCK) && !alive) { log.error(tree.pos(), - "initializer.must.be.able.to.complete.normally"); + Errors.InitializerMustBeAbleToCompleteNormally); } } @@ -435,7 +437,7 @@ */ void scanStat(JCTree tree) { if (!alive && tree != null) { - log.error(tree.pos(), "unreachable.stmt"); + log.error(tree.pos(), Errors.UnreachableStmt); if (!tree.hasTag(SKIP)) alive = true; } scan(tree); @@ -503,7 +505,7 @@ scanStat(tree.body); if (alive && !tree.sym.type.getReturnType().hasTag(VOID)) - log.error(TreeInfo.diagEndPos(tree.body), "missing.ret.stmt"); + log.error(TreeInfo.diagEndPos(tree.body), Errors.MissingRetStmt); List exits = pendingExits.toList(); pendingExits = new ListBuffer<>(); @@ -608,7 +610,7 @@ c.stats.nonEmpty() && l.tail.nonEmpty()) log.warning(Lint.LintCategory.FALLTHROUGH, l.tail.head.pos(), - "possible.fall-through.into.case"); + Warnings.PossibleFallThroughIntoCase); } if (!hasDefault) { alive = true; @@ -650,7 +652,7 @@ if (lint.isEnabled(Lint.LintCategory.FINALLY)) { log.warning(Lint.LintCategory.FINALLY, TreeInfo.diagEndPos(tree.finalizer), - "finally.cannot.complete"); + Warnings.FinallyCannotComplete); } } else { while (exits.nonEmpty()) { @@ -811,18 +813,15 @@ if (classDef != null && classDef.pos == exit.tree.pos) { log.error(exit.tree.pos(), - "unreported.exception.default.constructor", - exit.thrown); + Errors.UnreportedExceptionDefaultConstructor(exit.thrown)); } else if (exit.tree.hasTag(VARDEF) && ((JCVariableDecl)exit.tree).sym.isResourceVariable()) { log.error(exit.tree.pos(), - "unreported.exception.implicit.close", - exit.thrown, - ((JCVariableDecl)exit.tree).sym.name); + Errors.UnreportedExceptionImplicitClose(exit.thrown, + ((JCVariableDecl)exit.tree).sym.name)); } else { log.error(exit.tree.pos(), - "unreported.exception.need.to.catch.or.throw", - exit.thrown); + Errors.UnreportedExceptionNeedToCatchOrThrow(exit.thrown)); } } } @@ -1170,11 +1169,11 @@ void checkCaughtType(DiagnosticPosition pos, Type exc, List thrownInTry, List caughtInTry) { if (chk.subset(exc, caughtInTry)) { - log.error(pos, "except.already.caught", exc); + log.error(pos, Errors.ExceptAlreadyCaught(exc)); } else if (!chk.isUnchecked(pos, exc) && !isExceptionOrThrowable(exc) && !chk.intersects(exc, thrownInTry)) { - log.error(pos, "except.never.thrown.in.try", exc); + log.error(pos, Errors.ExceptNeverThrownInTry(exc)); } else if (allowImprovedCatchAnalysis) { List catchableThrownTypes = chk.intersect(List.of(exc), thrownInTry); // 'catchableThrownTypes' cannnot possibly be empty - if 'exc' was an @@ -1610,11 +1609,11 @@ else if ((sym.flags() & FINAL) != 0) { if ((sym.flags() & PARAMETER) != 0) { if ((sym.flags() & UNION) != 0) { //multi-catch parameter - log.error(pos, "multicatch.parameter.may.not.be.assigned", sym); + log.error(pos, Errors.MulticatchParameterMayNotBeAssigned(sym)); } else { - log.error(pos, "final.parameter.may.not.be.assigned", - sym); + log.error(pos, + Errors.FinalParameterMayNotBeAssigned(sym)); } } else if (!uninits.isMember(sym.adr)) { log.error(pos, flowKind.errKey, sym); @@ -1624,7 +1623,7 @@ } inits.incl(sym.adr); } else if ((sym.flags() & FINAL) != 0) { - log.error(pos, "var.might.already.be.assigned", sym); + log.error(pos, Errors.VarMightAlreadyBeAssigned(sym)); } } //where @@ -2190,7 +2189,7 @@ for (JCVariableDecl resVar : resourceVarDecls) { if (unrefdResources.includes(resVar.sym)) { log.warning(Lint.LintCategory.TRY, resVar.pos(), - "try.resource.not.referenced", resVar.sym); + Warnings.TryResourceNotReferenced(resVar.sym)); unrefdResources.remove(resVar.sym); } } @@ -2601,13 +2600,12 @@ void reportEffectivelyFinalError(DiagnosticPosition pos, Symbol sym) { String subKey = currentTree.hasTag(LAMBDA) ? "lambda" : "inner.cls"; - log.error(pos, "cant.ref.non.effectively.final.var", sym, diags.fragment(subKey)); + log.error(pos, Errors.CantRefNonEffectivelyFinalVar(sym, diags.fragment(subKey))); } void reportInnerClsNeedsFinalError(DiagnosticPosition pos, Symbol sym) { log.error(pos, - "local.var.accessed.from.icls.needs.final", - sym); + Errors.LocalVarAccessedFromIclsNeedsFinal(sym)); } /************************************************************************* @@ -2676,7 +2674,7 @@ if (!resource.hasTag(VARDEF)) { Symbol var = TreeInfo.symbol(resource); if (var != null && (var.flags() & (FINAL | EFFECTIVELY_FINAL)) == 0) { - log.error(resource.pos(), "try.with.resources.expr.effectively.final.var", var); + log.error(resource.pos(), Errors.TryWithResourcesExprEffectivelyFinalVar(var)); } } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Thu Jun 15 13:44:42 2017 +0200 @@ -28,6 +28,8 @@ import com.sun.tools.javac.code.Type.UndetVar.UndetVarListener; import com.sun.tools.javac.code.Types.TypeMapping; import com.sun.tools.javac.comp.Attr.CheckMode; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; +import com.sun.tools.javac.resources.CompilerProperties.Notes; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCTypeCast; import com.sun.tools.javac.tree.TreeInfo; @@ -238,7 +240,7 @@ } if (resultInfo != null && rs.verboseResolutionMode.contains(VerboseResolutionMode.DEFERRED_INST)) { - log.note(env.tree.pos, "deferred.method.inst", msym, mt, resultInfo.pt); + log.note(env.tree.pos, Notes.DeferredMethodInst(msym, mt, resultInfo.pt)); } // return instantiated version of method type @@ -665,12 +667,12 @@ //in the functional interface descriptors) List descParameterTypes = types.findDescriptorType(formalInterface).getParameterTypes(); if (descParameterTypes.size() != paramTypes.size()) { - checkContext.report(pos, diags.fragment("incompatible.arg.types.in.lambda")); + checkContext.report(pos, diags.fragment(Fragments.IncompatibleArgTypesInLambda)); return types.createErrorType(funcInterface); } for (Type p : descParameterTypes) { if (!types.isSameType(funcInterfaceContext.asUndetVar(p), paramTypes.head)) { - checkContext.report(pos, diags.fragment("no.suitable.functional.intf.inst", funcInterface)); + checkContext.report(pos, diags.fragment(Fragments.NoSuitableFunctionalIntfInst(funcInterface))); return types.createErrorType(funcInterface); } paramTypes = paramTypes.tail; @@ -689,7 +691,7 @@ if (!chk.checkValidGenericType(owntype)) { //if the inferred functional interface type is not well-formed, //or if it's not a subtype of the original target, issue an error - checkContext.report(pos, diags.fragment("no.suitable.functional.intf.inst", funcInterface)); + checkContext.report(pos, diags.fragment(Fragments.NoSuitableFunctionalIntfInst(funcInterface))); } //propagate constraints as per JLS 18.2.1 checkContext.compatible(owntype, funcInterface, types.noWarnings); diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Thu Jun 15 13:44:42 2017 +0200 @@ -45,6 +45,7 @@ import com.sun.tools.javac.code.Types; import com.sun.tools.javac.comp.LambdaToMethod.LambdaAnalyzerPreprocessor.*; import com.sun.tools.javac.comp.Lower.BasicFreeVarCollector; +import com.sun.tools.javac.resources.CompilerProperties.Notes; import com.sun.tools.javac.jvm.*; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; @@ -1497,7 +1498,7 @@ } else { super.visitReference(tree); if (dumpLambdaToMethodStats) { - log.note(tree, "mref.stat", rcontext.needsAltMetafactory(), null); + log.note(tree, Notes.MrefStat(rcontext.needsAltMetafactory(), null)); } } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Thu Jun 15 13:44:42 2017 +0200 @@ -39,6 +39,7 @@ import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Symbol.OperatorSymbol.AccessCode; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.code.Type.*; @@ -1760,7 +1761,7 @@ JCExpression makeOuterThis(DiagnosticPosition pos, TypeSymbol c) { List ots = outerThisStack; if (ots.isEmpty()) { - log.error(pos, "no.encl.instance.of.type.in.scope", c); + log.error(pos, Errors.NoEnclInstanceOfTypeInScope(c)); Assert.error(); return makeNull(); } @@ -1771,9 +1772,7 @@ do { ots = ots.tail; if (ots.isEmpty()) { - log.error(pos, - "no.encl.instance.of.type.in.scope", - c); + log.error(pos, Errors.NoEnclInstanceOfTypeInScope(c)); Assert.error(); // should have been caught in Attr return tree; } @@ -1818,7 +1817,7 @@ Symbol c = sym.owner; List ots = outerThisStack; if (ots.isEmpty()) { - log.error(pos, "no.encl.instance.of.type.in.scope", c); + log.error(pos, Errors.NoEnclInstanceOfTypeInScope(c)); Assert.error(); return makeNull(); } @@ -1829,9 +1828,7 @@ do { ots = ots.tail; if (ots.isEmpty()) { - log.error(pos, - "no.encl.instance.of.type.in.scope", - c); + log.error(pos, Errors.NoEnclInstanceOfTypeInScope(c)); Assert.error(); return tree; } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Thu Jun 15 13:44:42 2017 +0200 @@ -36,6 +36,7 @@ import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Type.*; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.JCTree.*; import static com.sun.tools.javac.code.Flags.*; @@ -320,7 +321,7 @@ checkType(tree.vartype, outertype, "incorrect.constructor.receiver.type"); checkType(tree.nameexpr, outertype, "incorrect.constructor.receiver.name"); } else { - log.error(tree, "receiver.parameter.not.applicable.constructor.toplevel.class"); + log.error(tree, Errors.ReceiverParameterNotApplicableConstructorToplevelClass); } } else { checkType(tree.vartype, m.owner.type, "incorrect.receiver.type"); diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Thu Jun 15 13:44:42 2017 +0200 @@ -276,7 +276,7 @@ msym.complete(); } } catch (CompletionFailure ex) { - log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, Position.NOPOS, "cant.access", ex.sym, ex.getDetailValue()); + log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, Position.NOPOS, Errors.CantAccess(ex.sym, ex.getDetailValue())); if (ex instanceof ClassFinder.BadClassFile) throw new Abort(); } finally { depth--; @@ -565,7 +565,7 @@ JavaFileObject prev = log.useSource(tree.sourcefile); try { - log.error(tree.pos(), "file.sb.on.source.or.patch.path.for.module"); + log.error(tree.pos(), Errors.FileSbOnSourceOrPatchPathForModule); } finally { log.useSource(prev); } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Thu Jun 15 13:44:42 2017 +0200 @@ -41,6 +41,7 @@ import com.sun.tools.javac.comp.Resolve.ReferenceLookupResult.StaticKind; import com.sun.tools.javac.jvm.*; import com.sun.tools.javac.main.Option; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.resources.CompilerProperties.Fragments; import com.sun.tools.javac.tree.*; import com.sun.tools.javac.tree.JCTree.*; @@ -253,7 +254,7 @@ JCDiagnostic getVerboseApplicableCandidateDiag(int pos, Symbol sym, Type inst) { JCDiagnostic subDiag = null; if (sym.type.hasTag(FORALL)) { - subDiag = diags.fragment("partial.inst.sig", inst); + subDiag = diags.fragment(Fragments.PartialInstSig(inst)); } String key = subDiag == null ? @@ -264,7 +265,7 @@ } JCDiagnostic getVerboseInapplicableCandidateDiag(int pos, Symbol sym, JCDiagnostic subDiag) { - return diags.fragment("not.applicable.method.found", pos, sym, subDiag); + return diags.fragment(Fragments.NotApplicableMethodFound(pos, sym, subDiag)); } // @@ -1452,8 +1453,7 @@ Symbol sym = findField(env, site, name, site.tsym); if (sym.kind == VAR) return (VarSymbol)sym; else throw new FatalError( - diags.fragment("fatal.err.cant.locate.field", - name)); + diags.fragment(Fragments.FatalErrCantLocateField(name))); } /** Find unqualified variable or field with given name. @@ -2545,8 +2545,8 @@ */ void checkNonAbstract(DiagnosticPosition pos, Symbol sym) { if ((sym.flags() & ABSTRACT) != 0 && (sym.flags() & DEFAULT) == 0) - log.error(pos, "abstract.cant.be.accessed.directly", - kindName(sym), sym, sym.location()); + log.error(pos, + Errors.AbstractCantBeAccessedDirectly(kindName(sym),sym, sym.location())); } /* *************************************************************************** @@ -2693,8 +2693,7 @@ site, name, argtypes, typeargtypes); if (sym.kind == MTH) return (MethodSymbol)sym; else throw new FatalError( - diags.fragment("fatal.err.cant.locate.meth", - name)); + diags.fragment(Fragments.FatalErrCantLocateMeth(name))); } /** Resolve constructor. @@ -2746,7 +2745,7 @@ Symbol sym = resolveConstructor(resolveContext, pos, env, site, argtypes, typeargtypes); if (sym.kind == MTH) return (MethodSymbol)sym; else throw new FatalError( - diags.fragment("fatal.err.cant.locate.ctor", site)); + diags.fragment(Fragments.FatalErrCantLocateCtor(site))); } Symbol findConstructor(DiagnosticPosition pos, Env env, @@ -3531,14 +3530,15 @@ //find a direct super type that is a subtype of 'c' for (Type i : types.directSupertypes(env.enclClass.type)) { if (i.tsym.isSubClass(c, types) && i.tsym != c) { - log.error(pos, "illegal.default.super.call", c, - diags.fragment("redundant.supertype", c, i)); + log.error(pos, + Errors.IllegalDefaultSuperCall(c, + Fragments.RedundantSupertype(c, i))); return syms.errSymbol; } } Assert.error(); } - log.error(pos, "not.encl.class", c); + log.error(pos, Errors.NotEnclClass(c)); return syms.errSymbol; } //where @@ -3572,7 +3572,7 @@ boolean isSuperCall) { Symbol sym = resolveSelfContainingInternal(env, member, isSuperCall); if (sym == null) { - log.error(pos, "encl.class.required", member); + log.error(pos, Errors.EnclClassRequired(member)); return syms.errSymbol; } else { return accessBase(sym, pos, env.enclClass.sym.type, sym.name, true); @@ -3623,8 +3623,9 @@ Type thisType = (t.tsym.owner.kind.matches(KindSelector.VAL_MTH) ? resolveSelf(pos, env, t.getEnclosingType().tsym, names._this) : resolveSelfContaining(pos, env, t.tsym, isSuperCall)).type; - if (env.info.isSelfCall && thisType.tsym == env.enclClass.sym) - log.error(pos, "cant.ref.before.ctor.called", "this"); + if (env.info.isSelfCall && thisType.tsym == env.enclClass.sym) { + log.error(pos, Errors.CantRefBeforeCtorCalled("this")); + } return thisType; } @@ -3847,15 +3848,13 @@ } private JCDiagnostic getLocationDiag(Symbol location, Type site) { if (location.kind == VAR) { - return diags.fragment("location.1", - kindName(location), - location, - location.type); + return diags.fragment(Fragments.Location1(kindName(location), + location, + location.type)); } else { - return diags.fragment("location", - typeKindName(site), - site, - null); + return diags.fragment(Fragments.Location(typeKindName(site), + site, + null)); } } } @@ -4019,11 +4018,11 @@ List details = List.nil(); for (Map.Entry _entry : candidatesMap.entrySet()) { Symbol sym = _entry.getKey(); - JCDiagnostic detailDiag = diags.fragment("inapplicable.method", - Kinds.kindName(sym), - sym.location(site, types), - sym.asMemberOf(site, types), - _entry.getValue()); + JCDiagnostic detailDiag = + diags.fragment(Fragments.InapplicableMethod(Kinds.kindName(sym), + sym.location(site, types), + sym.asMemberOf(site, types), + _entry.getValue())); details = details.prepend(detailDiag); } //typically members are visited in reverse order (see Scope) @@ -4067,7 +4066,7 @@ "cant.apply.diamond" : "cant.apply.diamond.1"; return diags.create(dkind, log.currentSource(), pos, key, - diags.fragment("diamond", site.tsym), details); + Fragments.Diamond(site.tsym), details); } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Thu Jun 15 13:44:42 2017 +0200 @@ -541,8 +541,7 @@ if (sym != tree.sym && types.isSameType(erasure(sym.type), tree.type)) { log.error(tree.pos(), - "name.clash.same.erasure", tree.sym, - sym); + Errors.NameClashSameErasure(tree.sym, sym)); return; } } @@ -683,8 +682,8 @@ else if (tree.args.length() != argtypes.length()) { log.error(tree.pos(), - "method.invoked.with.incorrect.number.arguments", - tree.args.length(), argtypes.length()); + Errors.MethodInvokedWithIncorrectNumberArguments(tree.args.length(), + argtypes.length())); } tree.args = translateArgs(tree.args, argtypes, tree.varargsElement); diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Thu Jun 15 13:44:42 2017 +0200 @@ -44,6 +44,7 @@ import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Type.*; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.JCTree.*; import static com.sun.tools.javac.code.Flags.*; @@ -52,6 +53,7 @@ import static com.sun.tools.javac.code.Kinds.Kind.*; import static com.sun.tools.javac.code.TypeTag.CLASS; import static com.sun.tools.javac.code.TypeTag.ERROR; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; import static com.sun.tools.javac.tree.JCTree.Tag.*; import com.sun.tools.javac.util.Dependencies.CompletionCause; @@ -339,7 +341,7 @@ // Import-on-demand java.lang. PackageSymbol javaLang = syms.enterPackage(syms.java_base, names.java_lang); if (javaLang.members().isEmpty() && !javaLang.exists()) - throw new FatalError(diags.fragment("fatal.err.no.java.lang")); + throw new FatalError(diags.fragment(Fragments.FatalErrNoJavaLang)); importAll(make.at(tree.pos()).Import(make.QualIdent(javaLang), false), javaLang, env); JCModuleDecl decl = tree.getModuleDecl(); @@ -378,8 +380,7 @@ PackageSymbol pack = syms.lookupPackage(env.toplevel.modle, p.owner.getQualifiedName()); if (syms.getClass(pack.modle, p.getQualifiedName()) != null) { log.error(tree.pos, - "pkg.clashes.with.class.of.same.name", - p); + Errors.PkgClashesWithClassOfSameName(p)); } p = p.owner; } @@ -471,7 +472,7 @@ final Name name, final Env env) { if (tsym.kind != TYP) { - log.error(DiagnosticFlag.RECOVERABLE, imp.pos(), "static.imp.only.classes.and.interfaces"); + log.error(DiagnosticFlag.RECOVERABLE, imp.pos(), Errors.StaticImpOnlyClassesAndInterfaces); return; } @@ -831,7 +832,7 @@ if (checkClash && sym.owner.kind == PCK && sym.owner != env.toplevel.modle.unnamedPackage && syms.packageExists(env.toplevel.modle, sym.fullname)) { - log.error(tree.pos, "clash.with.pkg.of.same.name", Kinds.kindName(sym), sym); + log.error(tree.pos, Errors.ClashWithPkgOfSameName(Kinds.kindName(sym),sym)); } if (sym.owner.kind == PCK && (sym.flags_field & PUBLIC) == 0 && !env.toplevel.sourcefile.isNameCompatible(sym.name.toString(),JavaFileObject.Kind.SOURCE)) { diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/BaseFileManager.java Thu Jun 15 13:44:42 2017 +0200 @@ -311,7 +311,7 @@ try { decoder = getDecoder(encName, ignoreEncodingErrors); } catch (IllegalCharsetNameException | UnsupportedCharsetException e) { - log.error("unsupported.encoding", encName); + log.error(Errors.UnsupportedEncoding(encName)); return (CharBuffer)CharBuffer.allocate(1).flip(); } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Thu Jun 15 13:44:42 2017 +0200 @@ -69,6 +69,7 @@ import com.sun.tools.javac.file.RelativePath.RelativeDirectory; import com.sun.tools.javac.file.RelativePath.RelativeFile; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.util.Assert; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Context.Factory; @@ -390,7 +391,7 @@ } } catch (IOException ex) { ex.printStackTrace(System.err); - log.error("error.reading.file", userPath, getMessage(ex)); + log.error(Errors.ErrorReadingFile(userPath, getMessage(ex))); } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java Thu Jun 15 13:44:42 2017 +0200 @@ -215,7 +215,7 @@ entries.add(getPath(s)); } catch (IllegalArgumentException e) { if (warn) { - log.warning(LintCategory.PATH, "invalid.path", s); + log.warning(LintCategory.PATH, Warnings.InvalidPath(s)); } } } @@ -311,7 +311,7 @@ if (!Files.isDirectory(dir)) { if (warn) { log.warning(Lint.LintCategory.PATH, - "dir.path.element.not.found", dir); + Warnings.DirPathElementNotFound(dir)); } return; } @@ -357,7 +357,7 @@ /* No such file or directory exists */ if (warn) { log.warning(Lint.LintCategory.PATH, - "path.element.not.found", file); + Warnings.PathElementNotFound(file)); } super.add(file); return; @@ -380,13 +380,13 @@ FileSystems.newFileSystem(file, null).close(); if (warn) { log.warning(Lint.LintCategory.PATH, - "unexpected.archive.file", file); + Warnings.UnexpectedArchiveFile(file)); } } catch (IOException | ProviderNotFoundException e) { // FIXME: include e.getLocalizedMessage in warning if (warn) { log.warning(Lint.LintCategory.PATH, - "invalid.archive.file", file); + Warnings.InvalidArchiveFile(file)); } return; } @@ -419,7 +419,7 @@ addFile(f, warn); } } catch (IOException e) { - log.error("error.reading.file", jarFile, JavacFileManager.getMessage(e)); + log.error(Errors.ErrorReadingFile(jarFile, JavacFileManager.getMessage(e))); } } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/CRTable.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/CRTable.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/CRTable.java Thu Jun 15 13:44:42 2017 +0200 @@ -27,6 +27,7 @@ import java.util.*; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.*; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.List; @@ -173,7 +174,7 @@ ", new_pos = " + new_pos); } if (new_pos == Position.NOPOS) - log.warning(pos, "position.overflow", line); + log.warning(pos, Warnings.PositionOverflow(line)); return new_pos; } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Jun 15 13:44:42 2017 +0200 @@ -57,6 +57,8 @@ import com.sun.tools.javac.jvm.ClassFile.NameAndType; import com.sun.tools.javac.jvm.ClassFile.Version; import com.sun.tools.javac.main.Option; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.DefinedBy.Api; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; @@ -279,11 +281,11 @@ diagFactory); } - public ClassFinder.BadEnclosingMethodAttr badEnclosingMethod(Object... args) { + public ClassFinder.BadEnclosingMethodAttr badEnclosingMethod(Symbol sym) { return new ClassFinder.BadEnclosingMethodAttr ( currentOwner.enclClass(), currentClassFile, - diagFactory.fragment("bad.enclosing.method", args), + diagFactory.fragment(Fragments.BadEnclosingMethod(sym)), diagFactory); } @@ -985,8 +987,8 @@ if (lintClassfile && !warnedAttrs.contains(name)) { JavaFileObject prev = log.useSource(currentClassFile); try { - log.warning(LintCategory.CLASSFILE, (DiagnosticPosition) null, "future.attr", - name, version.major, version.minor, majorVersion, minorVersion); + log.warning(LintCategory.CLASSFILE, (DiagnosticPosition) null, + Warnings.FutureAttr(name, version.major, version.minor, majorVersion, minorVersion)); } finally { log.useSource(prev); } @@ -2078,14 +2080,11 @@ try { if (lintClassfile) { if (failure == null) { - log.warning("annotation.method.not.found", - container, - name); + log.warning(Warnings.AnnotationMethodNotFound(container, name)); } else { - log.warning("annotation.method.not.found.reason", - container, - name, - failure.getDetailValue());//diagnostic, if present + log.warning(Warnings.AnnotationMethodNotFoundReason(container, + name, + failure.getDetailValue()));//diagnostic, if present } } } finally { @@ -2161,12 +2160,14 @@ } if (enumerator == null) { if (failure != null) { - log.warning("unknown.enum.constant.reason", - currentClassFile, enumTypeSym, proxy.enumerator, - failure.getDiagnostic()); + log.warning(Warnings.UnknownEnumConstantReason(currentClassFile, + enumTypeSym, + proxy.enumerator, + failure.getDiagnostic())); } else { - log.warning("unknown.enum.constant", - currentClassFile, enumTypeSym, proxy.enumerator); + log.warning(Warnings.UnknownEnumConstant(currentClassFile, + enumTypeSym, + proxy.enumerator)); } result = new Attribute.Enum(enumTypeSym.type, new VarSymbol(0, proxy.enumerator, syms.botType, enumTypeSym)); @@ -2686,10 +2687,9 @@ majorVersion * 1000 + minorVersion < Version.MIN().major * 1000 + Version.MIN().minor) { if (majorVersion == (maxMajor + 1)) - log.warning("big.major.version", - currentClassFile, - majorVersion, - maxMajor); + log.warning(Warnings.BigMajorVersion(currentClassFile, + majorVersion, + maxMajor)); else throw badClassFile("wrong.version", Integer.toString(majorVersion), @@ -2982,7 +2982,7 @@ theRepeatable = deproxy.deproxyCompound(repeatable); } } catch (Exception e) { - throw new CompletionFailure(sym, e.getMessage()); + throw new CompletionFailure(sym, ClassReader.this.diagFactory.fragment(Fragments.ExceptionMessage(e.getMessage()))); } sym.getAnnotationTypeMetadata().setTarget(theTarget); diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java Thu Jun 15 13:44:42 2017 +0200 @@ -28,6 +28,7 @@ import com.sun.tools.javac.code.*; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Types.UniqueType; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; @@ -95,15 +96,15 @@ */ public boolean checkLimits(DiagnosticPosition pos, Log log) { if (cp > ClassFile.MAX_CODE) { - log.error(pos, "limit.code"); + log.error(pos, Errors.LimitCode); return true; } if (max_locals > ClassFile.MAX_LOCALS) { - log.error(pos, "limit.locals"); + log.error(pos, Errors.LimitLocals); return true; } if (max_stack > ClassFile.MAX_STACK) { - log.error(pos, "limit.stack"); + log.error(pos, Errors.LimitStack); return true; } return false; diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Thu Jun 15 13:44:42 2017 +0200 @@ -39,6 +39,7 @@ import com.sun.tools.javac.code.Type.*; import com.sun.tools.javac.jvm.Code.*; import com.sun.tools.javac.jvm.Items.*; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree.*; @@ -270,7 +271,7 @@ break; case ARRAY: if (types.dimensions(t) > ClassFile.MAX_DIMENSIONS) { - log.error(pos, "limit.dimensions"); + log.error(pos, Errors.LimitDimensions); nerrs++; } break; @@ -517,7 +518,7 @@ !(constValue instanceof String) || ((String)constValue).length() < Pool.MAX_STRING_LENGTH) return; - log.error(pos, "limit.string"); + log.error(pos, Errors.LimitString); nerrs++; } @@ -888,7 +889,7 @@ // System.err.println("Generating " + meth + " in " + meth.owner); //DEBUG if (Code.width(types.erasure(env.enclMethod.sym.type).getParameterTypes()) + extras > ClassFile.MAX_PARAMETERS) { - log.error(tree.pos(), "limit.parameters"); + log.error(tree.pos(), Errors.LimitParameters); nerrs++; } @@ -905,7 +906,7 @@ } if (code.state.stacksize != 0) { - log.error(tree.body.pos(), "stack.sim.error", tree); + log.error(tree.body.pos(), Errors.StackSimError(tree.sym)); throw new AssertionError(); } @@ -1536,7 +1537,7 @@ code.addCatch(startpc1, endpc1, handler_pc1, (char)catch_type); } else { - log.error(pos, "limit.code.too.large.for.try.stmt"); + log.error(pos, Errors.LimitCodeTooLargeForTryStmt); nerrs++; } } @@ -1769,7 +1770,7 @@ Item makeNewArray(DiagnosticPosition pos, Type type, int ndims) { Type elemtype = types.elemtype(type); if (types.dimensions(type) > ClassFile.MAX_DIMENSIONS) { - log.error(pos, "limit.dimensions"); + log.error(pos, Errors.LimitDimensions); nerrs++; } int elemcode = Code.arraycode(elemtype); @@ -2181,7 +2182,7 @@ genDef(l.head, localEnv); } if (pool.numEntries() > Pool.MAX_ENTRIES) { - log.error(cdef.pos(), "limit.pool"); + log.error(cdef.pos(), Errors.LimitPool); nerrs++; } if (nerrs != 0) { diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java Thu Jun 15 13:44:42 2017 +0200 @@ -578,7 +578,7 @@ if (lintOptions && source.compareTo(Source.DEFAULT) < 0 && !options.isSet(Option.RELEASE)) { if (fm instanceof BaseFileManager) { if (((BaseFileManager) fm).isDefaultBootClassPath()) - log.warning(LintCategory.OPTIONS, "source.no.bootclasspath", source.name); + log.warning(LintCategory.OPTIONS, Warnings.SourceNoBootclasspath(source.name)); } } @@ -628,7 +628,7 @@ } if (obsoleteOptionFound && lintOptions) { - log.warning(LintCategory.OPTIONS, "option.obsolete.suppression"); + log.warning(LintCategory.OPTIONS, Warnings.OptionObsoleteSuppression); } SourceVersion sv = Source.toSourceVersion(source); diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Jun 15 13:44:42 2017 +0200 @@ -81,6 +81,8 @@ import com.sun.tools.javac.code.Symbol.ModuleSymbol; import com.sun.tools.javac.resources.CompilerProperties.Errors; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; +import com.sun.tools.javac.resources.CompilerProperties.Notes; import com.sun.tools.javac.resources.CompilerProperties.Warnings; import static com.sun.tools.javac.code.TypeTag.CLASS; @@ -393,7 +395,7 @@ syms = Symtab.instance(context); } catch (CompletionFailure ex) { // inlined Check.completionError as it is not initialized yet - log.error("cant.access", ex.sym, ex.getDetailValue()); + log.error(Errors.CantAccess(ex.sym, ex.getDetailValue())); if (ex instanceof ClassFinder.BadClassFile) throw new Abort(); } @@ -570,7 +572,7 @@ */ public int errorCount() { if (werror && log.nerrors == 0 && log.nwarnings > 0) { - log.error("warnings.and.werror"); + log.error(Errors.WarningsAndWerror); } return log.nerrors; } @@ -598,7 +600,7 @@ inputFiles.add(filename); return filename.getCharContent(false); } catch (IOException e) { - log.error("error.reading.file", filename, JavacFileManager.getMessage(e)); + log.error(Errors.ErrorReadingFile(filename, JavacFileManager.getMessage(e))); return null; } } @@ -742,10 +744,10 @@ if (gen.genClass(env, cdef) && (errorCount() == 0)) return writer.writeClass(cdef.sym); } catch (ClassWriter.PoolOverflow ex) { - log.error(cdef.pos(), "limit.pool"); + log.error(cdef.pos(), Errors.LimitPool); } catch (ClassWriter.StringOverflow ex) { - log.error(cdef.pos(), "limit.string.overflow", - ex.value.substring(0, 20)); + log.error(cdef.pos(), + Errors.LimitStringOverflow(ex.value.substring(0, 20))); } catch (CompletionFailure ex) { chk.completionError(cdef.pos(), ex); } @@ -764,7 +766,7 @@ JavaFileObject.Kind.SOURCE, null); if (inputFiles.contains(outFile)) { - log.error(cdef.pos(), "source.cant.overwrite.input.file", outFile); + log.error(cdef.pos(), Errors.SourceCantOverwriteInputFile(outFile)); return null; } else { try (BufferedWriter out = new BufferedWriter(outFile.openWriter())) { @@ -791,7 +793,9 @@ */ public void readSourceFile(JCCompilationUnit tree, ClassSymbol c) throws CompletionFailure { if (completionFailureName == c.fullname) { - throw new CompletionFailure(c, "user-selected completion failure by class name"); + JCDiagnostic msg = + diagFactory.fragment(Fragments.UserSelectedCompletionFailure); + throw new CompletionFailure(c, msg); } JavaFileObject filename = c.classfile; JavaFileObject prev = log.useSource(filename); @@ -800,7 +804,7 @@ try { tree = parse(filename, filename.getCharContent(false)); } catch (IOException e) { - log.error("error.reading.file", filename, JavacFileManager.getMessage(e)); + log.error(Errors.ErrorReadingFile(filename, JavacFileManager.getMessage(e))); tree = make.TopLevel(List.nil()); } finally { log.useSource(prev); @@ -819,7 +823,7 @@ // have enough modules available to access java.lang, and // so risk getting FatalError("no.java.lang") from MemberEnter. if (!modules.enter(List.of(tree), c)) { - throw new CompletionFailure(c, diags.fragment("cant.resolve.modules")); + throw new CompletionFailure(c, diags.fragment(Fragments.CantResolveModules)); } enter.complete(List.of(tree), c); @@ -839,20 +843,18 @@ if (isModuleInfo) { if (enter.getEnv(tree.modle) == null) { JCDiagnostic diag = - diagFactory.fragment("file.does.not.contain.module"); + diagFactory.fragment(Fragments.FileDoesNotContainModule); throw new ClassFinder.BadClassFile(c, filename, diag, diagFactory); } } else if (isPkgInfo) { if (enter.getEnv(tree.packge) == null) { JCDiagnostic diag = - diagFactory.fragment("file.does.not.contain.package", - c.location()); + diagFactory.fragment(Fragments.FileDoesNotContainPackage(c.location())); throw new ClassFinder.BadClassFile(c, filename, diag, diagFactory); } } else { JCDiagnostic diag = - diagFactory.fragment("file.doesnt.contain.class", - c.getQualifiedName()); + diagFactory.fragment(Fragments.FileDoesntContainClass(c.getQualifiedName())); throw new ClassFinder.BadClassFile(c, filename, diag, diagFactory); } } @@ -1177,13 +1179,12 @@ // annotation processing is to occur with compilation, // emit a warning. if (options.isSet(PROC, "only")) { - log.warning("proc.proc-only.requested.no.procs"); + log.warning(Warnings.ProcProcOnlyRequestedNoProcs); todo.clear(); } // If not processing annotations, classnames must be empty if (!classnames.isEmpty()) { - log.error("proc.no.explicit.annotation.processing.requested", - classnames); + log.error(Errors.ProcNoExplicitAnnotationProcessingRequested(classnames)); } Assert.checkNull(deferredDiagnosticHandler); return ; // continue regular compilation @@ -1198,8 +1199,7 @@ // Check for explicit request for annotation // processing if (!explicitAnnotationProcessingRequested()) { - log.error("proc.no.explicit.annotation.processing.requested", - classnames); + log.error(Errors.ProcNoExplicitAnnotationProcessingRequested(classnames)); deferredDiagnosticHandler.reportDeferredDiagnostics(); log.popDiagnosticHandler(deferredDiagnosticHandler); return ; // TODO: Will this halt compilation? @@ -1252,7 +1252,7 @@ procEnvImpl.close(); } } catch (CompletionFailure ex) { - log.error("cant.access", ex.sym, ex.getDetailValue()); + log.error(Errors.CantAccess(ex.sym, ex.getDetailValue())); if (deferredDiagnosticHandler != null) { deferredDiagnosticHandler.reportDeferredDiagnostics(); log.popDiagnosticHandler(deferredDiagnosticHandler); @@ -1623,8 +1623,8 @@ if (results != null && file != null) results.add(file); } catch (IOException ex) { - log.error(cdef.pos(), "class.cant.write", - cdef.sym, ex.getMessage()); + log.error(cdef.pos(), + Errors.ClassCantWrite(cdef.sym, ex.getMessage())); return; } finally { log.useSource(prev); @@ -1711,13 +1711,13 @@ && implicitSourceFilesRead && implicitSourcePolicy == ImplicitSourcePolicy.UNSET) { if (explicitAnnotationProcessingRequested()) - log.warning("proc.use.implicit"); + log.warning(Warnings.ProcUseImplicit); else - log.warning("proc.use.proc.or.implicit"); + log.warning(Warnings.ProcUseProcOrImplicit); } chk.reportDeferredDiagnostics(); if (log.compressedOutput) { - log.mandatoryNote(null, "compressed.diags"); + log.mandatoryNote(null, Notes.CompressedDiags); } } @@ -1798,7 +1798,7 @@ // better written to set any/all exceptions from all the // Closeables as suppressed exceptions on the FatalError // that is thrown. - JCDiagnostic msg = diagFactory.fragment("fatal.err.cant.close"); + JCDiagnostic msg = diagFactory.fragment(Fragments.FatalErrCantClose); throw new FatalError(msg, e); } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Thu Jun 15 13:44:42 2017 +0200 @@ -1244,7 +1244,7 @@ if (sel.name != names._class) { return illegal(); } else { - log.error(token.pos, "no.annotations.on.dot.class"); + log.error(token.pos, Errors.NoAnnotationsOnDotClass); return expr; } } @@ -3039,7 +3039,7 @@ int pos = token.pos; Name name; if (lambdaParameter && token.kind == UNDERSCORE) { - log.error(pos, "underscore.as.identifier.in.lambda"); + log.error(pos, Errors.UnderscoreAsIdentifierInLambda); name = token.name(); nextToken(); } else { @@ -3049,10 +3049,10 @@ name = ((JCIdent)pn).name; } else { if ((mods.flags & Flags.VARARGS) != 0) { - log.error(token.pos, "varargs.and.receiver"); + log.error(token.pos, Errors.VarargsAndReceiver); } if (token.kind == LBRACKET) { - log.error(token.pos, "array.and.receiver"); + log.error(token.pos, Errors.ArrayAndReceiver); } return toP(F.at(pos).ReceiverVarDef(mods, pn, type)); } @@ -3062,7 +3062,7 @@ } if ((mods.flags & Flags.VARARGS) != 0 && token.kind == LBRACKET) { - log.error(token.pos, "varargs.and.old.array.syntax"); + log.error(token.pos, Errors.VarargsAndOldArraySyntax); } type = bracketsOpt(type); return toP(F.at(pos).VarDef(mods, name, type, null)); @@ -3104,7 +3104,7 @@ } else { checkVariableInTryWithResources(startPos); if (!t.hasTag(IDENT) && !t.hasTag(SELECT)) { - log.error(t.pos(), "try.with.resources.expr.needs.var"); + log.error(t.pos(), Errors.TryWithResourcesExprNeedsVar); } return t; @@ -4144,52 +4144,52 @@ void checkDiamond() { if (!allowDiamond) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "diamond.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.DiamondNotSupportedInSource(source.name)); } } void checkMulticatch() { if (!allowMulticatch) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "multicatch.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.MulticatchNotSupportedInSource(source.name)); } } void checkTryWithResources() { if (!allowTWR) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "try.with.resources.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.TryWithResourcesNotSupportedInSource(source.name)); } } void checkVariableInTryWithResources(int startPos) { if (!allowEffectivelyFinalVariablesInTWR) { - log.error(DiagnosticFlag.SOURCE_LEVEL, startPos, "var.in.try.with.resources.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, startPos, Errors.VarInTryWithResourcesNotSupportedInSource(source.name)); } } void checkLambda() { if (!allowLambda) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "lambda.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.LambdaNotSupportedInSource(source.name)); } } void checkMethodReferences() { if (!allowMethodReferences) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "method.references.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.MethodReferencesNotSupportedInSource(source.name)); } } void checkDefaultMethods() { if (!allowDefaultMethods) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "default.methods.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.DefaultMethodsNotSupportedInSource(source.name)); } } void checkIntersectionTypesInCast() { if (!allowIntersectionTypesInCast) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "intersection.types.in.cast.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.IntersectionTypesInCastNotSupportedInSource(source.name)); } } void checkStaticInterfaceMethods() { if (!allowStaticInterfaceMethods) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "static.intf.methods.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.StaticIntfMethodsNotSupportedInSource(source.name)); } } void checkTypeAnnotations() { if (!allowTypeAnnotations) { - log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, "type.annotations.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, token.pos, Errors.TypeAnnotationsNotSupportedInSource(source.name)); } } void checkPrivateInterfaceMethods() { @@ -4199,7 +4199,7 @@ } protected void checkAnnotationsAfterTypeParams(int pos) { if (!allowAnnotationsAfterTypeParams) { - log.error(DiagnosticFlag.SOURCE_LEVEL, pos, "annotations.after.type.params.not.supported.in.source", source.name); + log.error(DiagnosticFlag.SOURCE_LEVEL, pos, Errors.AnnotationsAfterTypeParamsNotSupportedInSource(source.name)); } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/UnicodeReader.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/UnicodeReader.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/UnicodeReader.java Thu Jun 15 13:44:42 2017 +0200 @@ -29,6 +29,7 @@ import java.util.Arrays; import com.sun.tools.javac.file.JavacFileManager; +import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.util.ArrayUtils; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Name; @@ -176,7 +177,7 @@ return; } } - log.error(bp, "illegal.unicode.esc"); + log.error(bp, Errors.IllegalUnicodeEsc); } else { bp--; ch = '\\'; @@ -231,7 +232,7 @@ int codePoint = peekSurrogates(); int result = codePoint >= 0 ? Character.digit(codePoint, base) : Character.digit(c, base); if (result >= 0 && c > 0x7f) { - log.error(pos + 1, "illegal.nonascii.digit"); + log.error(pos + 1, Errors.IllegalNonasciiDigit); if (codePoint >= 0) scanChar(); ch = "0123456789abcdef".charAt(result); diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacFiler.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacFiler.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacFiler.java Thu Jun 15 13:44:42 2017 +0200 @@ -56,6 +56,7 @@ import com.sun.tools.javac.code.Symtab; import com.sun.tools.javac.comp.Modules; import com.sun.tools.javac.model.JavacElements; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.DefinedBy.Api; @@ -482,7 +483,7 @@ String base = name.substring(periodIndex); String extn = (isSourceFile ? ".java" : ".class"); if (base.equals(extn)) - log.warning("proc.suspicious.class.name", name, extn); + log.warning(Warnings.ProcSuspiciousClassName(name, extn)); } } checkNameAndExistence(mod, name, isSourceFile); @@ -500,7 +501,7 @@ checkFileReopening(fileObject, true); if (lastRound) - log.warning("proc.file.create.last.round", name); + log.warning(Warnings.ProcFileCreateLastRound(name)); if (isSourceFile) aggregateGeneratedSourceNames.add(Pair.of(mod, name)); @@ -690,7 +691,7 @@ private void checkName(String name, boolean allowUnnamedPackageInfo) throws FilerException { if (!SourceVersion.isName(name) && !isPackageInfo(name, allowUnnamedPackageInfo)) { if (lint) - log.warning("proc.illegal.file.name", name); + log.warning(Warnings.ProcIllegalFileName(name)); throw new FilerException("Illegal name " + name); } } @@ -722,7 +723,7 @@ initialInputs.contains(existing.sourcefile)); if (alreadySeen) { if (lint) - log.warning("proc.type.recreate", typename); + log.warning(Warnings.ProcTypeRecreate(typename)); throw new FilerException("Attempt to recreate a file for type " + typename); } if (!mod.isUnnamed() && !typename.contains(".")) { @@ -737,7 +738,7 @@ private void checkFileReopening(FileObject fileObject, boolean forWriting) throws FilerException { if (isInFileObjectHistory(fileObject, forWriting)) { if (lint) - log.warning("proc.file.reopening", fileObject.getName()); + log.warning(Warnings.ProcFileReopening(fileObject.getName())); throw new FilerException("Attempt to reopen a file for path " + fileObject.getName()); } if (forWriting) @@ -797,7 +798,7 @@ public void warnIfUnclosedFiles() { if (!openTypeNames.isEmpty()) - log.warning("proc.unclosed.type.files", openTypeNames.toString()); + log.warning(Warnings.ProcUnclosedTypeFiles(openTypeNames)); } /** diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacMessager.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacMessager.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacMessager.java Thu Jun 15 13:44:42 2017 +0200 @@ -26,6 +26,9 @@ package com.sun.tools.javac.processing; import com.sun.tools.javac.model.JavacElements; +import com.sun.tools.javac.resources.CompilerProperties.Errors; +import com.sun.tools.javac.resources.CompilerProperties.Notes; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.DefinedBy.Api; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag; @@ -114,21 +117,21 @@ switch (kind) { case ERROR: errorCount++; - log.error(DiagnosticFlag.MULTIPLE, pos, "proc.messager", msg.toString()); + log.error(DiagnosticFlag.MULTIPLE, pos, Errors.ProcMessager(msg.toString())); break; case WARNING: warningCount++; - log.warning(pos, "proc.messager", msg.toString()); + log.warning(pos, Warnings.ProcMessager(msg.toString())); break; case MANDATORY_WARNING: warningCount++; - log.mandatoryWarning(pos, "proc.messager", msg.toString()); + log.mandatoryWarning(pos, Warnings.ProcMessager(msg.toString())); break; default: - log.note(pos, "proc.messager", msg.toString()); + log.note(pos, Notes.ProcMessager(msg.toString())); break; } } finally { diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu Jun 15 13:44:42 2017 +0200 @@ -69,6 +69,7 @@ import com.sun.tools.javac.platform.PlatformDescription; import com.sun.tools.javac.platform.PlatformDescription.PluginInfo; import com.sun.tools.javac.resources.CompilerProperties.Errors; +import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.*; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.util.Abort; @@ -412,7 +413,7 @@ this.iterator = handleServiceLoaderUnavailability("proc.no.service", null); } } catch (Throwable t) { - log.error("proc.service.problem"); + log.error(Errors.ProcServiceProblem); throw new Abort(t); } } @@ -428,7 +429,7 @@ try { return internalHasNext(); } catch(ServiceConfigurationError sce) { - log.error("proc.bad.config.file", sce.getLocalizedMessage()); + log.error(Errors.ProcBadConfigFile(sce.getLocalizedMessage())); throw new Abort(sce); } catch (Throwable t) { throw new Abort(t); @@ -444,7 +445,7 @@ try { return internalNext(); } catch (ServiceConfigurationError sce) { - log.error("proc.bad.config.file", sce.getLocalizedMessage()); + log.error(Errors.ProcBadConfigFile(sce.getLocalizedMessage())); throw new Abort(sce); } catch (Throwable t) { throw new Abort(t); @@ -561,13 +562,13 @@ ensureReadable(processorClass); return (Processor) processorClass.getConstructor().newInstance(); } catch (ClassNotFoundException cnfe) { - log.error("proc.processor.not.found", processorName); + log.error(Errors.ProcProcessorNotFound(processorName)); return null; } catch (ClassCastException cce) { - log.error("proc.processor.wrong.type", processorName); + log.error(Errors.ProcProcessorWrongType(processorName)); return null; } catch (Exception e ) { - log.error("proc.processor.cant.instantiate", processorName); + log.error(Errors.ProcProcessorCantInstantiate(processorName)); return null; } } catch (ClientCodeException e) { @@ -707,19 +708,17 @@ SourceVersion procSourceVersion = processor.getSupportedSourceVersion(); if (procSourceVersion.compareTo(Source.toSourceVersion(source)) < 0 ) { - log.warning("proc.processor.incompatible.source.version", - procSourceVersion, - processor.getClass().getName(), - source.name); + log.warning(Warnings.ProcProcessorIncompatibleSourceVersion(procSourceVersion, + processor.getClass().getName(), + source.name)); } } private boolean checkOptionName(String optionName, Log log) { boolean valid = isValidOptionName(optionName); if (!valid) - log.error("proc.processor.bad.option.name", - optionName, - processor.getClass().getName()); + log.error(Errors.ProcProcessorBadOptionName(optionName, + processor.getClass().getName())); return valid; } @@ -904,8 +903,7 @@ // Remove annotations processed by javac unmatchedAnnotations.keySet().removeAll(platformAnnotations); if (unmatchedAnnotations.size() > 0) { - log.warning("proc.annotations.without.processors", - unmatchedAnnotations.keySet()); + log.warning(Warnings.ProcAnnotationsWithoutProcessors(unmatchedAnnotations.keySet())); } } @@ -967,12 +965,12 @@ try { return proc.process(tes, renv); } catch (ClassFinder.BadClassFile ex) { - log.error("proc.cant.access.1", ex.sym, ex.getDetailValue()); + log.error(Errors.ProcCantAccess1(ex.sym, ex.getDetailValue())); return false; } catch (CompletionFailure ex) { StringWriter out = new StringWriter(); ex.printStackTrace(new PrintWriter(out)); - log.error("proc.cant.access", ex.sym, ex.getDetailValue(), out.toString()); + log.error(Errors.ProcCantAccess(ex.sym, ex.getDetailValue(), out.toString())); return false; } catch (ClientCodeException e) { throw e; @@ -1385,7 +1383,7 @@ private void warnIfUnmatchedOptions() { if (!unmatchedProcessorOptions.isEmpty()) { - log.warning("proc.unmatched.processor.options", unmatchedProcessorOptions.toString()); + log.warning(Warnings.ProcUnmatchedProcessorOptions(unmatchedProcessorOptions.toString())); } } @@ -1490,7 +1488,7 @@ throw new AssertionError(ex); } catch (ServiceProxy.ServiceConfigurationError e) { - log.error("proc.bad.config.file", e.getLocalizedMessage()); + log.error(Errors.ProcBadConfigFile(e.getLocalizedMessage())); return true; } } @@ -1682,7 +1680,7 @@ if (MatchingUtils.isValidImportString(pkg)) { return Pattern.compile(module + MatchingUtils.validImportStringToPatternString(pkg)); } else { - log.warning("proc.malformed.supported.string", s, p.getClass().getName()); + log.warning(Warnings.ProcMalformedSupportedString(s, p.getClass().getName())); return noMatches; // won't match any valid identifier } } diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Thu Jun 15 13:44:42 2017 +0200 @@ -28,12 +28,14 @@ # values. # The simple types currently in use are: # +# annotation annotation compound # boolean true or false # diagnostic a sub-message; see compiler.misc.* # fragment similar to 'message segment', but with more specific type # modifier a Java modifier; e.g. public, private, protected # file a file URL # file object a file URL - similar to 'file' but typically used for source/class files, hence more specific +# flag a Flags.Flag instance # name a name, typically a Java identifier # number an integer # option name the name of a command line option @@ -49,8 +51,9 @@ # # The following compound types are also used: # +# collection of X a comma-separated collection of items; e.g. collection of type # list of X a comma-separated list of items; e.g. list of type -# set of X a comma-separated collection of items; e.g. set of modifier +# set of X a comma-separated set of items; e.g. set of modifier # # These may be composed: # @@ -59,7 +62,7 @@ # The following type aliases are supported: # # message segment --> diagnostic or fragment -# file name --> file or file object +# file name --> file, path or file object # # Custom comments are supported in parenthesis i.e. # @@ -85,25 +88,27 @@ compiler.err.abstract.meth.cant.have.body=\ abstract methods cannot have a body +# 0: kind name, 1: symbol compiler.err.already.annotated=\ {0} {1} has already been annotated -# 0: symbol kind, 1: symbol, 2: symbol kind, 3: symbol +# 0: kind name, 1: symbol, 2: kind name, 3: symbol compiler.err.already.defined=\ {0} {1} is already defined in {2} {3} -# 0: symbol kind, 1: symbol, 2: symbol kind, 3: symbol kind, 4: symbol +# 0: kind name, 1: symbol, 2: kind name, 3: kind name, 4: symbol compiler.err.already.defined.in.clinit=\ {0} {1} is already defined in {2} of {3} {4} -# 0: string +# 0: symbol compiler.err.already.defined.single.import=\ a type with the same simple name is already defined by the single-type-import of {0} -# 0: string +# 0: symbol compiler.err.already.defined.static.single.import=\ a type with the same simple name is already defined by the static single-type-import of {0} +# 0: symbol compiler.err.already.defined.this.unit=\ {0} is already defined in this compilation unit @@ -197,11 +202,11 @@ compiler.misc.cant.apply.symbols=\ no suitable {0} found for {1}({2}) -# 0: symbol kind, 1: symbol +# 0: kind name, 1: symbol compiler.misc.no.abstracts=\ no abstract method found in {0} {1} -# 0: symbol kind, 1: symbol +# 0: kind name, 1: symbol compiler.misc.incompatible.abstracts=\ multiple non-overriding abstract methods found in {0} {1} @@ -227,12 +232,12 @@ {0} is not a functional interface\n\ {1} -# 0: symbol, 1: symbol kind, 2: symbol +# 0: type, 1: kind name, 2: symbol compiler.misc.invalid.generic.lambda.target=\ invalid functional descriptor for lambda expression\n\ method {0} in {1} {2} is generic -# 0: symbol kind, 1: symbol +# 0: kind name, 1: symbol compiler.misc.incompatible.descs.in.functional.intf=\ incompatible function descriptors found in {0} {1} @@ -257,7 +262,7 @@ compiler.misc.not.an.intf.component=\ component type {0} is not an interface -# 0: symbol kind, 1: message segment +# 0: kind name, 1: message segment compiler.err.invalid.mref=\ invalid {0} reference\n\ {1} @@ -307,7 +312,7 @@ compiler.err.cant.inherit.from.final=\ cannot inherit from final {0} -# 0: symbol +# 0: symbol or string compiler.err.cant.ref.before.ctor.called=\ cannot reference {0} before supertype constructor has been called @@ -321,7 +326,7 @@ compiler.err.catch.without.try=\ ''catch'' without ''try'' -# 0: symbol kind, 1: symbol +# 0: kind name, 1: symbol compiler.err.clash.with.pkg.of.same.name=\ {0} {1} clashes with package of same name @@ -334,7 +339,7 @@ compiler.err.cont.outside.loop=\ continue outside of loop -# 0: symbol +# 0: symbol or type compiler.err.cyclic.inheritance=\ cyclic inheritance involving {0} @@ -342,7 +347,7 @@ compiler.err.cyclic.annotation.element=\ type of element {0} is cyclic -# 0: unused +# 0: symbol compiler.err.call.to.super.not.allowed.in.enum.ctor=\ call to super not allowed in enum constructor @@ -350,7 +355,7 @@ compiler.err.no.superclass=\ {0} has no superclass. -# 0: symbol, 1: type, 2: symbol, 3: type, 4: unused +# 0: symbol, 1: type, 2: symbol, 3: type, 4: type compiler.err.concrete.inheritance.conflict=\ methods {0} from {1} and {2} from {3} are inherited with the same signature @@ -369,11 +374,11 @@ compiler.err.duplicate.annotation.member.value=\ duplicate element ''{0}'' in annotation @{1}. -# 0: name, 1: unused +# 0: type compiler.err.duplicate.annotation.missing.container=\ {0} is not a repeatable annotation type -# 0: type, 1: unused +# 0: symbol compiler.err.invalid.repeatable.annotation=\ duplicate annotation: {0} is annotated with an invalid @Repeatable annotation @@ -389,7 +394,7 @@ compiler.err.invalid.repeatable.annotation.invalid.value=\ {0} is not a valid @Repeatable: invalid value element -# 0: symbol or type, 1: unused, 2: type +# 0: symbol or type, 1: type, 2: type compiler.err.invalid.repeatable.annotation.value.return=\ containing annotation type ({0}) must declare an element named ''value'' of type {2} @@ -397,7 +402,7 @@ compiler.err.invalid.repeatable.annotation.elem.nondefault=\ containing annotation type ({0}) does not have a default value for element {1} -# 0: symbol, 1: unused, 2: symbol, 3: unused +# 0: symbol, 1: string, 2: symbol, 3: string compiler.err.invalid.repeatable.annotation.retention=\ retention of containing annotation type ({0}) is shorter than the retention of repeatable annotation type ({2}) @@ -526,7 +531,7 @@ compiler.err.illegal.char.for.encoding=\ unmappable character (0x{0}) for encoding {1} -# 0: set of modifier, 1: set of modifier +# 0: set of flag, 1: set of flag compiler.err.illegal.combination.of.modifiers=\ illegal combination of modifiers: {0} and {1} @@ -539,7 +544,7 @@ compiler.err.illegal.forward.ref=\ illegal forward reference -# 0: symbol, 1: string +# 0: symbol, 1: object compiler.err.not.in.profile=\ {0} is not available in profile ''{1}'' @@ -627,9 +632,8 @@ compiler.err.intf.meth.cant.have.body=\ interface abstract methods cannot have body -# 0: symbol compiler.err.invalid.annotation.member.type=\ - invalid type for element {0} of annotation type + invalid type for annotation type element compiler.err.invalid.binary.number=\ binary numbers must contain at least one binary digit @@ -707,6 +711,7 @@ compiler.err.limit.string=\ constant string too long +# 0: string compiler.err.limit.string.overflow=\ UTF8 representation for string \"{0}...\" is too long for the constant pool @@ -722,14 +727,14 @@ compiler.err.missing.ret.stmt=\ missing return statement -# 0: unused +# 0: type compiler.misc.missing.ret.val=\ missing return value compiler.misc.unexpected.ret.val=\ unexpected return value -# 0: set of modifier +# 0: set of flag compiler.err.mod.not.allowed.here=\ modifier {0} not allowed here @@ -778,7 +783,7 @@ compiler.misc.conditional.target.cant.be.void=\ target-type for conditional expression cannot be void -# 0: type +# 0: message segment compiler.misc.incompatible.ret.type.in.lambda=\ bad return type in lambda expression\n\ {0} @@ -787,7 +792,7 @@ lambda body is not compatible with a void functional interface\n\ (consider using a block lambda body, or use a statement expression instead) -# 0: type +# 0: message segment compiler.misc.incompatible.ret.type.in.mref=\ bad return type in method reference\n\ {0} @@ -808,9 +813,11 @@ compiler.err.new.not.allowed.in.annotation=\ ''new'' not allowed in an annotation +# 0: name, 1: type compiler.err.no.annotation.member=\ no annotation member {0} in {1} +# 0: symbol compiler.err.no.encl.instance.of.type.in.scope=\ no enclosing instance of type {0} is in scope @@ -820,6 +827,7 @@ compiler.err.no.match.entry=\ {0} has no match in entry in {1}; required {2} +# 0: type compiler.err.not.annotation.type=\ {0} is not an annotation type @@ -958,14 +966,14 @@ # Errors related to annotation processing -# 0: symbol, 1: string, 2: string (stack-trace) +# 0: symbol, 1: message segment, 2: string (stack-trace) compiler.err.proc.cant.access=\ cannot access {0}\n\ {1}\n\ Consult the following stack trace for details.\n\ {2} -# 0: symbol, 1: string +# 0: symbol, 1: message segment compiler.err.proc.cant.access.1=\ cannot access {0}\n\ {1} @@ -979,13 +987,21 @@ compiler.err.proc.messager=\ {0} -# 0: list of string +# 0: string +compiler.misc.exception.message=\ + {0} + +compiler.misc.user.selected.completion.failure=\ + user-selected completion failure by class name + +# 0: collection of string compiler.err.proc.no.explicit.annotation.processing.requested=\ Class names, ''{0}'', are only accepted if annotation processing is explicitly requested compiler.err.proc.no.service=\ A ServiceLoader was not usable and is required for annotation processing. +# 0: string, 1: string compiler.err.proc.processor.bad.option.name=\ Bad option name ''{0}'' provided by processor ''{1}'' @@ -1004,13 +1020,14 @@ compiler.err.proc.service.problem=\ Error creating a service loader to load Processors. +# 0: string compiler.err.proc.bad.config.file=\ Bad service configuration file, or exception thrown while constructing Processor object: {0} compiler.err.proc.cant.create.loader=\ Could not create class loader for annotation processors: {0} -# 0: unused +# 0: symbol compiler.err.qualified.new.of.static.class=\ qualified new of static class @@ -1061,9 +1078,11 @@ compiler.err.does.not.override.abstract=\ {0} is not abstract and does not override abstract method {1} in {2} +# 0: file object compiler.err.source.cant.overwrite.input.file=\ error writing source; cannot overwrite input file {0} +# 0: symbol compiler.err.stack.sim.error=\ Internal error: stack sim error on {0} @@ -1123,7 +1142,7 @@ illegal static interface method call\n\ the receiver expression should be replaced with the type qualifier ''{0}'' -# 0: type, 1: message segment +# 0: symbol or type, 1: message segment compiler.err.illegal.default.super.call=\ bad type qualifier {0} in default super call\n\ {1} @@ -1145,7 +1164,7 @@ compiler.err.unclosed.str.lit=\ unclosed string literal -# 0: name +# 0: string compiler.err.unsupported.encoding=\ unsupported encoding: {0} @@ -1314,12 +1333,15 @@ compiler.misc.fatal.err.no.java.lang=\ Fatal Error: Unable to find package java.lang in classpath or bootclasspath +# 0: name compiler.misc.fatal.err.cant.locate.meth=\ Fatal Error: Unable to find method {0} +# 0: name compiler.misc.fatal.err.cant.locate.field=\ Fatal Error: Unable to find field {0} +# 0: type compiler.misc.fatal.err.cant.locate.ctor=\ Fatal Error: Unable to find constructor for {0} @@ -1527,7 +1549,7 @@ compiler.warn.constant.SVUID=\ serialVersionUID must be constant in class {0} -# 0: file name +# 0: path compiler.warn.dir.path.element.not.found=\ bad path element "{0}": no such directory @@ -1609,6 +1631,7 @@ compiler.warn.override.varargs.extra=\ {0}; overriding method is missing ''...'' +# 0: message segment compiler.warn.override.bridge=\ {0}; overridden method is a bridge method @@ -1616,7 +1639,7 @@ compiler.warn.pkg-info.already.seen=\ a package-info.java file has already been seen for package {0} -# 0: file name +# 0: path compiler.warn.path.element.not.found=\ bad path element "{0}": no such file or directory @@ -1678,7 +1701,7 @@ compiler.warn.proc.package.does.not.exist=\ package {0} does not exist -# 0: name +# 0: string compiler.warn.proc.file.reopening=\ Attempt to create a file for ''{0}'' multiple times @@ -1686,7 +1709,7 @@ compiler.warn.proc.type.already.exists=\ A file for type ''{0}'' already exists on the sourcepath or classpath -# 0: name +# 0: string compiler.warn.proc.type.recreate=\ Attempt to create a file for type ''{0}'' multiple times @@ -1698,7 +1721,7 @@ compiler.warn.proc.suspicious.class.name=\ Creating file for a type whose name ends in {1}: ''{0}'' -# 0: name +# 0: string compiler.warn.proc.file.create.last.round=\ File for type ''{0}'' created in the last round will not be subject to annotation processing. @@ -1730,7 +1753,7 @@ compiler.warn.proc.messager=\ {0} -# 0: set of name +# 0: set of string compiler.warn.proc.unclosed.type.files=\ Unclosed files for the types ''{0}''; these types will not undergo annotation processing @@ -1784,16 +1807,19 @@ compiler.warn.missing.deprecated.annotation=\ deprecated item is not annotated with @Deprecated -# 0: symbol kind +# 0: kind name compiler.warn.deprecated.annotation.has.no.effect=\ @Deprecated annotation has no effect on this {0} declaration +# 0: string compiler.warn.invalid.path=\ Invalid filename: {0} +# 0: path compiler.warn.invalid.archive.file=\ Unexpected file on path: {0} +# 0: path compiler.warn.unexpected.archive.file=\ Unexpected extension for archive file: {0} @@ -1807,17 +1833,19 @@ compiler.warn.empty.if=\ empty statement after if +# 0: type, 1: name compiler.warn.annotation.method.not.found=\ Cannot find annotation method ''{1}()'' in type ''{0}'' +# 0: type, 1: name, 2: message segment compiler.warn.annotation.method.not.found.reason=\ Cannot find annotation method ''{1}()'' in type ''{0}'': {2} -# 0: symbol, 1: name +# 0: file object, 1: symbol, 2: name compiler.warn.unknown.enum.constant=\ unknown enum constant {1}.{2} -# 0: symbol, 1: name, 2: message segment +# 0: file object, 1: symbol, 2: name, 3: message segment compiler.warn.unknown.enum.constant.reason=\ unknown enum constant {1}.{2}\n\ reason: {3} @@ -1827,7 +1855,6 @@ found raw type: {0}\n\ missing type arguments for generic class {1} -# 0: unused, 1: unused compiler.warn.diamond.redundant.args=\ Redundant type arguments in new expression (use diamond operator instead). @@ -2004,6 +2031,7 @@ compiler.misc.module.info.invalid.super.class=\ module-info with invalid super class +# 0: name compiler.misc.class.file.not.found=\ class file for {0} not found @@ -2031,6 +2059,7 @@ compiler.misc.file.doesnt.contain.class=\ file does not contain class {0} +# 0: symbol compiler.misc.file.does.not.contain.package=\ file does not contain package {0} @@ -2105,14 +2134,14 @@ # compiler.err.no.elem.type=\ # \[\*\] cannot have a type -# 0: type +# 0: message segment compiler.misc.try.not.applicable.to.type=\ try-with-resources not applicable to variable type\n\ ({0}) ##### -# 0: message segment or type, 1: message segment +# 0: object, 1: message segment compiler.err.type.found.req=\ unexpected type\n\ required: {1}\n\ @@ -2232,11 +2261,10 @@ type arguments {0} inferred for {1} are not allowed in this context\n\ inferred arguments are not expressible in the Signature attribute -# 0: unused +# 0: type compiler.misc.diamond.and.explicit.params=\ cannot use ''<>'' with explicit type parameters for constructor -# 0: unused compiler.misc.mref.infer.and.explicit.params=\ cannot use raw constructor reference with explicit type parameters for constructor @@ -2266,7 +2294,7 @@ auxiliary class {0} in {1} should not be accessed from outside its own source file ## The first argument ({0}) is a "kindname". -# 0: symbol kind, 1: symbol, 2: symbol +# 0: kind name, 1: symbol, 2: symbol compiler.err.abstract.cant.be.accessed.directly=\ abstract {0} {1} in {2} cannot be accessed directly @@ -2289,6 +2317,7 @@ ## Both arguments ({0}, {1}) are "kindname"s. {0} is a comma-separated list ## of kindnames (the list should be identical to that provided in source. +# 0: set of kind name, 1: set of kind name compiler.err.unexpected.type=\ unexpected type\n\ required: {0}\n\ @@ -2304,36 +2333,36 @@ ## The second argument {1} is the non-resolved symbol ## The third argument {2} is a list of type parameters (non-empty if {1} is a method) ## The fourth argument {3} is a list of argument types (non-empty if {1} is a method) -# 0: symbol kind, 1: name, 2: unused, 3: unused +# 0: kind name, 1: name, 2: unused, 3: unused compiler.err.cant.resolve=\ cannot find symbol\n\ symbol: {0} {1} -# 0: symbol kind, 1: name, 2: unused, 3: list of type +# 0: kind name, 1: name, 2: unused, 3: list of type compiler.err.cant.resolve.args=\ cannot find symbol\n\ symbol: {0} {1}({3}) -# 0: symbol kind, 1: name, 2: list of type, 3: list of type +# 0: kind name, 1: name, 2: list of type, 3: list of type compiler.err.cant.resolve.args.params=\ cannot find symbol\n\ symbol: {0} <{2}>{1}({3}) ## arguments from {0} to {3} have the same meaning as above ## The fifth argument {4} is a location subdiagnostic (see below) -# 0: symbol kind, 1: name, 2: unused, 3: unused, 4: message segment +# 0: kind name, 1: name, 2: unused, 3: unused, 4: message segment compiler.err.cant.resolve.location=\ cannot find symbol\n\ symbol: {0} {1}\n\ location: {4} -# 0: symbol kind, 1: name, 2: unused, 3: list of type, 4: message segment +# 0: kind name, 1: name, 2: unused, 3: list of type, 4: message segment compiler.err.cant.resolve.location.args=\ cannot find symbol\n\ symbol: {0} {1}({3})\n\ location: {4} -# 0: symbol kind, 1: name, 2: list of type, 3: list, 4: message segment +# 0: kind name, 1: name, 2: list of type, 3: list, 4: message segment compiler.err.cant.resolve.location.args.params=\ cannot find symbol\n\ symbol: {0} <{2}>{1}({3})\n\ @@ -2341,13 +2370,13 @@ ### Following are replicated/used for method reference diagnostics -# 0: symbol kind, 1: name, 2: unused, 3: list of type, 4: message segment +# 0: kind name, 1: name, 2: unused, 3: list of type, 4: message segment compiler.misc.cant.resolve.location.args=\ cannot find symbol\n\ symbol: {0} {1}({3})\n\ location: {4} -# 0: symbol kind, 1: name, 2: list of type, 3: list, 4: message segment +# 0: kind name, 1: name, 2: list of type, 3: list, 4: message segment compiler.misc.cant.resolve.location.args.params=\ cannot find symbol\n\ symbol: {0} <{2}>{1}({3})\n\ @@ -2358,11 +2387,11 @@ ## The second argument {1} is the location name ## The third argument {2} is the location type (only when {1} is a variable name) -# 0: symbol kind, 1: type or symbol, 2: unused +# 0: kind name, 1: type or symbol, 2: unused compiler.misc.location=\ {0} {1} -# 0: symbol kind, 1: symbol, 2: type +# 0: kind name, 1: symbol, 2: type compiler.misc.location.1=\ {0} {1} of type {2} @@ -2426,7 +2455,7 @@ {0}\n\ overriding method is static -# 0: message segment, 1: set of modifier +# 0: message segment, 1: set of flag compiler.err.override.meth=\ {0}\n\ overridden method is {1} @@ -2438,7 +2467,7 @@ # In the following string {1} is a space separated list of Java Keywords, as # they would have been declared in the source code -# 0: message segment, 1: set of modifier +# 0: message segment, 1: set of flag or string compiler.err.override.weaker.access=\ {0}\n\ attempting to assign weaker access privileges; was {1} @@ -2504,7 +2533,7 @@ compiler.misc.varargs.clash.with=\ {0} in {1} overrides {2} in {3} -# 0: symbol kind, 1: symbol, 2: symbol, 3: message segment +# 0: kind name, 1: symbol, 2: symbol, 3: message segment compiler.misc.inapplicable.method=\ {0} {1}.{2} is not applicable\n\ ({3}) @@ -2563,17 +2592,16 @@ compiler.err.this.as.identifier=\ as of release 8, ''this'' is allowed as the parameter name for the receiver type only, which has to be the first parameter -# 0: symbol compiler.err.receiver.parameter.not.applicable.constructor.toplevel.class=\ receiver parameter not applicable for constructor of top-level class # TODO 308: make a better error message -# 0: symbol +# 0: annotation compiler.err.cant.type.annotate.scoping.1=\ scoping construct cannot be annotated with type-use annotation: {0} # TODO 308: make a better error message -# 0: list of symbol +# 0: list of annotation compiler.err.cant.type.annotate.scoping=\ scoping construct cannot be annotated with type-use annotations: {0} diff -r d23ae2d67a5d -r ea7475564d07 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Thu Jun 15 13:44:42 2017 +0200 @@ -40,6 +40,7 @@ import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Type.*; import com.sun.tools.javac.code.Types; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.code.TypeTag.*; @@ -520,7 +521,7 @@ if (indexOf(t, WhereClauseKind.INTERSECTION) == -1) { Type supertype = types.supertype(t); List interfaces = types.interfaces(t); - JCDiagnostic d = diags.fragment("where.intersection", t, interfaces.prepend(supertype)); + JCDiagnostic d = diags.fragment(Fragments.WhereIntersection(t, interfaces.prepend(supertype))); whereClauses.get(WhereClauseKind.INTERSECTION).put(t, d); visit(supertype); visit(interfaces); @@ -575,7 +576,7 @@ } else { Assert.check(!boundErroneous); //this is a fresh (synthetic) tvar - JCDiagnostic d = diags.fragment("where.fresh.typevar", t, bounds); + JCDiagnostic d = diags.fragment(Fragments.WhereFreshTypevar(t, bounds)); whereClauses.get(WhereClauseKind.TYPEVAR).put(t, d); visit(bounds); } diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/T5024091/T5024091.out --- a/langtools/test/tools/javac/T5024091/T5024091.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/T5024091/T5024091.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -T5024091.java:12:29: compiler.err.cant.access: java.lang.StringBuilder, user-selected completion failure by class name +T5024091.java:12:29: compiler.err.cant.access: java.lang.StringBuilder, (compiler.misc.user.selected.completion.failure) 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/neg/Cycle1.out --- a/langtools/test/tools/javac/annotations/neg/Cycle1.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/neg/Cycle1.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -Cycle1.java:13:9: compiler.err.cyclic.annotation.element +Cycle1.java:13:9: compiler.err.cyclic.annotation.element: cycle1.Foo 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/neg/Cycle2.out --- a/langtools/test/tools/javac/annotations/neg/Cycle2.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/neg/Cycle2.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -Cycle2.java:13:9: compiler.err.cyclic.annotation.element +Cycle2.java:13:9: compiler.err.cyclic.annotation.element: cycle2.Bar 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/neg/Cycle3.out --- a/langtools/test/tools/javac/annotations/neg/Cycle3.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/neg/Cycle3.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -Cycle3.java:17:9: compiler.err.cyclic.annotation.element +Cycle3.java:17:9: compiler.err.cyclic.annotation.element: cycle3.A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/neg/Dup.out --- a/langtools/test/tools/javac/annotations/neg/Dup.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/neg/Dup.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -Dup.java:11:1: compiler.err.duplicate.annotation.missing.container: Dup, java.lang.annotation.Repeatable +Dup.java:11:1: compiler.err.duplicate.annotation.missing.container: Dup 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/neg/Z14.out --- a/langtools/test/tools/javac/annotations/neg/Z14.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/neg/Z14.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -Z14.java:10:15: compiler.err.intf.annotation.cant.have.type.params +Z14.java:10:15: compiler.err.intf.annotation.cant.have.type.params: An 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/repeatingAnnotations/BaseAnnoAsContainerAnno.out --- a/langtools/test/tools/javac/annotations/repeatingAnnotations/BaseAnnoAsContainerAnno.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/BaseAnnoAsContainerAnno.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -BaseAnnoAsContainerAnno.java:13:11: compiler.err.cyclic.annotation.element +BaseAnnoAsContainerAnno.java:13:11: compiler.err.cyclic.annotation.element: Foo 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/repeatingAnnotations/CyclicAnnotation.out --- a/langtools/test/tools/javac/annotations/repeatingAnnotations/CyclicAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/CyclicAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -CyclicAnnotation.java:13:11: compiler.err.cyclic.annotation.element +CyclicAnnotation.java:13:11: compiler.err.cyclic.annotation.element: Baz 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/repeatingAnnotations/DuplicateErrors.out --- a/langtools/test/tools/javac/annotations/repeatingAnnotations/DuplicateErrors.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/DuplicateErrors.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,3 +1,3 @@ -DuplicateErrors.java:34:1: compiler.err.duplicate.annotation.missing.container: Foo, java.lang.annotation.Repeatable -DuplicateErrors.java:35:1: compiler.err.duplicate.annotation.missing.container: Foo, java.lang.annotation.Repeatable +DuplicateErrors.java:34:1: compiler.err.duplicate.annotation.missing.container: Foo +DuplicateErrors.java:35:1: compiler.err.duplicate.annotation.missing.container: Foo 2 errors diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/repeatingAnnotations/NoRepeatableAnno.out --- a/langtools/test/tools/javac/annotations/repeatingAnnotations/NoRepeatableAnno.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/NoRepeatableAnno.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -NoRepeatableAnno.java:11:6: compiler.err.duplicate.annotation.missing.container: Foo, java.lang.annotation.Repeatable +NoRepeatableAnno.java:11:6: compiler.err.duplicate.annotation.missing.container: Foo 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:11:15: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:11:15: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:11:20: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:11:20: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:11:32: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:11:32: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/parambounds/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/parambounds/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/parambounds/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:9:38: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:9:38: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:10:16: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:10:16: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/rest/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/rest/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/rest/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:11:12: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:11:12: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:10:24: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:10:24: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:9:28: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:9:28: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/DuplicateTypeAnnotation.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/DuplicateTypeAnnotation.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/DuplicateTypeAnnotation.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -DuplicateTypeAnnotation.java:10:24: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable +DuplicateTypeAnnotation.java:10:24: compiler.err.duplicate.annotation.missing.container: A 1 error diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,28 +1,28 @@ -RepeatingTypeAnnotations.java:39:25: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:41:25: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:42:25: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:50:31: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:52:24: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:61:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:63:38: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:65:24: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:72:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:77:28: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:79:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:79:36: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:81:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:85:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:85:34: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:89:18: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:89:33: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:93:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:93:35: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:97:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:97:34: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:101:37: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:101:26: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:101:56: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable -RepeatingTypeAnnotations.java:101:72: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable +RepeatingTypeAnnotations.java:39:25: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:41:25: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:42:25: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:50:31: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:52:24: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:61:21: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:63:38: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:65:24: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:72:21: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:77:28: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:79:21: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:79:36: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:81:19: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:85:19: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:85:34: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:89:18: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:89:33: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:93:19: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:93:35: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:97:19: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:97:34: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:101:37: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:101:26: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:101:56: compiler.err.duplicate.annotation.missing.container: TA +RepeatingTypeAnnotations.java:101:72: compiler.err.duplicate.annotation.missing.container: TA - compiler.note.unchecked.filename: RepeatingTypeAnnotations.java - compiler.note.unchecked.recompile 25 errors diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/diags/examples.not-yet.txt --- a/langtools/test/tools/javac/diags/examples.not-yet.txt Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/diags/examples.not-yet.txt Thu Jun 15 13:44:42 2017 +0200 @@ -56,6 +56,7 @@ compiler.misc.base.membership # UNUSED compiler.misc.class.file.not.found # ClassReader compiler.misc.class.file.wrong.class +compiler.misc.exception.message # uncommon completion failure based on a string compiler.misc.fatal.err.cant.locate.ctor # Resolve, from Lower compiler.misc.fatal.err.cant.locate.field # Resolve, from Lower compiler.misc.fatal.err.cant.locate.meth # Resolve, from Lower @@ -94,6 +95,7 @@ compiler.misc.unable.to.access.file # ClassFile compiler.misc.undecl.type.var # ClassReader compiler.misc.unicode.str.not.supported # ClassReader +compiler.misc.user.selected.completion.failure # manual completion failure compiler.misc.malformed.vararg.method # ClassReader compiler.misc.version.not.available # JavaCompiler; implies build error compiler.misc.where.description.captured diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/importChecks/NoImportedNoClasses.out --- a/langtools/test/tools/javac/importChecks/NoImportedNoClasses.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/importChecks/NoImportedNoClasses.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,2 +1,2 @@ -NoImportedNoClasses.java:10:1: compiler.err.cant.resolve.location: kindname.static, UNKNOWN, , , kindname.interface, java.lang.Runnable +NoImportedNoClasses.java:10:1: compiler.err.cant.resolve.location: kindname.static, UNKNOWN, null, null, (compiler.misc.location: kindname.interface, java.lang.Runnable, null) 1 error \ No newline at end of file diff -r d23ae2d67a5d -r ea7475564d07 langtools/test/tools/javac/staticImport/ImportPrivate.out --- a/langtools/test/tools/javac/staticImport/ImportPrivate.out Wed Jun 14 20:05:01 2017 +0000 +++ b/langtools/test/tools/javac/staticImport/ImportPrivate.out Thu Jun 15 13:44:42 2017 +0200 @@ -1,3 +1,3 @@ -ImportPrivate.java:12:1: compiler.err.cant.resolve.location: kindname.static, m, , , kindname.class, importPrivate.A +ImportPrivate.java:12:1: compiler.err.cant.resolve.location: kindname.static, m, null, null, (compiler.misc.location: kindname.class, importPrivate.A, null) ImportPrivate.java:22:9: compiler.err.cant.resolve.location.args: kindname.method, m, , , (compiler.misc.location: kindname.class, importPrivate.MyTest, null) 2 errors