Skip to content

Commit

Permalink
6900037: javac should warn if earlier -source is used and bootclasspa…
Browse files Browse the repository at this point in the history
…th not set

Reviewed-by: darcy
  • Loading branch information
jonathan-gibbons committed Nov 29, 2010
1 parent 68ea64e commit be8a607
Show file tree
Hide file tree
Showing 39 changed files with 190 additions and 69 deletions.
29 changes: 17 additions & 12 deletions langtools/src/share/classes/com/sun/tools/javac/code/Lint.java
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,11 @@ public enum LintCategory {
*/
FINALLY("finally"),

/**
* Warn about issues relating to use of command line options
*/
OPTIONS("options"),

/**
* Warn about issues regarding method overrides.
*/
Expand All @@ -182,39 +187,39 @@ public enum LintCategory {
PROCESSING("processing"),

/**
* Warn about Serializable classes that do not provide a serial version ID.
* Warn about unchecked operations on raw types.
*/
SERIAL("serial"),
RAW("rawtypes"),

/**
* Warn about unchecked operations on raw types.
* Warn about Serializable classes that do not provide a serial version ID.
*/
UNCHECKED("unchecked"),
SERIAL("serial"),

/**
* Warn about unchecked operations on raw types.
* Warn about issues relating to use of statics
*/
RAW("rawtypes"),
STATIC("static"),

/**
* Warn about proprietary API that may be removed in a future release.
*/
SUNAPI("sunapi", true),

/**
* Warn about issues relating to use of statics
* Warn about issues relating to use of try blocks (i.e. try-with-resources)
*/
STATIC("static"),
TRY("try"),

/**
* Warn about potentially unsafe vararg methods
* Warn about unchecked operations on raw types.
*/
VARARGS("varargs"),
UNCHECKED("unchecked"),

/**
* Warn about issues relating to use of try blocks (i.e. try-with-resources)
* Warn about potentially unsafe vararg methods
*/
TRY("try");
VARARGS("varargs");

LintCategory(String option) {
this(option, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,11 @@ public void setContext(Context context) {
}
}

@Override
public boolean isDefaultBootClassPath() {
return paths.isDefaultBootClassPath();
}

public JavaFileObject getFileForInput(String name) {
return getRegularFile(new File(name));
}
Expand Down
45 changes: 34 additions & 11 deletions langtools/src/share/classes/com/sun/tools/javac/file/Paths.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@ void setContext(Context context) {
*/
private File bootClassPathRtJar = null;

/**
* Is bootclasspath the default?
*/
private boolean isDefaultBootClassPath;

Path getPathForLocation(Location location) {
Path path = pathsForLocation.get(location);
if (path == null)
Expand All @@ -129,7 +134,7 @@ void setPathForLocation(Location location, Iterable<? extends File> path) {
if (location == CLASS_PATH)
p = computeUserClassPath();
else if (location == PLATFORM_CLASS_PATH)
p = computeBootClassPath();
p = computeBootClassPath(); // sets isDefaultBootClassPath
else if (location == ANNOTATION_PROCESSOR_PATH)
p = computeAnnotationProcessorPath();
else if (location == SOURCE_PATH)
Expand All @@ -138,13 +143,20 @@ else if (location == SOURCE_PATH)
// no defaults for other paths
p = null;
} else {
if (location == PLATFORM_CLASS_PATH)
isDefaultBootClassPath = false;
p = new Path();
for (File f: path)
p.addFile(f, warn); // TODO: is use of warn appropriate?
}
pathsForLocation.put(location, p);
}

boolean isDefaultBootClassPath() {
lazy();
return isDefaultBootClassPath;
}

protected void lazy() {
if (!inited) {
warn = lint.isEnabled(Lint.LintCategory.PATH);
Expand Down Expand Up @@ -262,9 +274,10 @@ private void addDirectory(File dir, boolean warn) {
}

public Path addFiles(String files, boolean warn) {
if (files != null)
if (files != null) {
for (File file : getPathEntries(files, emptyPathDefault))
addFile(file, warn);
}
return this;
}

Expand Down Expand Up @@ -334,18 +347,23 @@ private void addJarClassPath(File jarFile, boolean warn) {

private Path computeBootClassPath() {
bootClassPathRtJar = null;
String optionValue;
Path path = new Path();

path.addFiles(options.get(XBOOTCLASSPATH_PREPEND));
String bootclasspathOpt = options.get(BOOTCLASSPATH);
String endorseddirsOpt = options.get(ENDORSEDDIRS);
String extdirsOpt = options.get(EXTDIRS);
String xbootclasspathPrependOpt = options.get(XBOOTCLASSPATH_PREPEND);
String xbootclasspathAppendOpt = options.get(XBOOTCLASSPATH_APPEND);

if ((optionValue = options.get(ENDORSEDDIRS)) != null)
path.addDirectories(optionValue);
path.addFiles(xbootclasspathPrependOpt);

if (endorseddirsOpt != null)
path.addDirectories(endorseddirsOpt);
else
path.addDirectories(System.getProperty("java.endorsed.dirs"), false);

if ((optionValue = options.get(BOOTCLASSPATH)) != null) {
path.addFiles(optionValue);
if (bootclasspathOpt != null) {
path.addFiles(bootclasspathOpt);
} else {
// Standard system classes for this compiler's release.
String files = System.getProperty("sun.boot.class.path");
Expand All @@ -357,16 +375,21 @@ private Path computeBootClassPath() {
}
}

path.addFiles(options.get(XBOOTCLASSPATH_APPEND));
path.addFiles(xbootclasspathAppendOpt);

// Strictly speaking, standard extensions are not bootstrap
// classes, but we treat them identically, so we'll pretend
// that they are.
if ((optionValue = options.get(EXTDIRS)) != null)
path.addDirectories(optionValue);
if (extdirsOpt != null)
path.addDirectories(extdirsOpt);
else
path.addDirectories(System.getProperty("java.ext.dirs"), false);

isDefaultBootClassPath =
(xbootclasspathPrependOpt == null) &&
(bootclasspathOpt == null) &&
(xbootclasspathAppendOpt == null);

return path;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
import com.sun.tools.javac.file.JavacFileManager;
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.code.*;
import com.sun.tools.javac.code.Lint.LintCategory;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.tree.JCTree.*;
Expand Down Expand Up @@ -370,6 +371,15 @@ public JavaCompiler(final Context context) {
processPcks = options.isSet("process.packages");
werror = options.isSet(WERROR);

if (source.compareTo(Source.DEFAULT) < 0) {
if (options.isUnset(XLINT_CUSTOM, "-" + LintCategory.OPTIONS.option)) {
if (fileManager instanceof BaseFileManager) {
if (((BaseFileManager) fileManager).isDefaultBootClassPath())
log.warning(LintCategory.OPTIONS, "source.no.bootclasspath", source.name);
}
}
}

verboseCompilePolicy = options.isSet("verboseCompilePolicy");

if (attrParseOnly)
Expand Down Expand Up @@ -783,6 +793,7 @@ public void compile(List<JavaFileObject> sourceFileObjects,
hasBeenUsed = true;

start_msec = now();

try {
initProcessAnnotations(processors);

Expand All @@ -797,7 +808,7 @@ public void compile(List<JavaFileObject> sourceFileObjects,
elapsed_msec = delegateCompiler.elapsed_msec;
} catch (Abort ex) {
if (devVerbose)
ex.printStackTrace();
ex.printStackTrace(System.err);
} finally {
if (procEnvImpl != null)
procEnvImpl.close();
Expand Down Expand Up @@ -841,7 +852,7 @@ private void compile2() {
}
} catch (Abort ex) {
if (devVerbose)
ex.printStackTrace();
ex.printStackTrace(System.err);
}

if (verbose) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ public int compile(String[] args,
processors);

if (log.expectDiagKeys != null) {
if (log.expectDiagKeys.size() == 0) {
if (log.expectDiagKeys.isEmpty()) {
Log.printLines(log.noticeWriter, "all expected diagnostics found");
return EXIT_OK;
} else {
Expand Down Expand Up @@ -506,7 +506,7 @@ void resourceMessage(Throwable ex) {
void apMessage(AnnotationProcessingError ex) {
Log.printLines(out,
getLocalizedString("msg.proc.annotation.uncaught.exception"));
ex.getCause().printStackTrace();
ex.getCause().printStackTrace(out);
}

/** Display the location and checksum of a class. */
Expand Down Expand Up @@ -563,6 +563,7 @@ public static String getLocalizedString(String key, Object... args) { // FIXME s
public static void useRawMessages(boolean enable) {
if (enable) {
messages = new JavacMessages(javacBundleName) {
@Override
public String getLocalizedString(String key, Object... args) {
return key;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,11 @@ public ClassLoader getClassLoader(Location location) {
return getClassLoader(lb.toArray(new URL[lb.size()]));
}

@Override
public boolean isDefaultBootClassPath() {
return searchPaths.isDefaultBootClassPath();
}

// <editor-fold defaultstate="collapsed" desc="Location handling">

public boolean hasLocation(Location location) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -764,6 +764,9 @@ compiler.warn.big.major.version=\
compiler.warn.static.not.qualified.by.type=\
static {0} should be qualified by type name, {1}, instead of by an expression

compiler.warn.source.no.bootclasspath=\
bootstrap class path not set in conjunction with -source {0}

# Warnings related to annotation processing
compiler.warn.proc.package.does.not.exist=\
package {0} does not exist
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
* There are no references here to file-system specific objects such as
* java.io.File or java.nio.file.Path.
*/
public class BaseFileManager {
public abstract class BaseFileManager {
protected BaseFileManager(Charset charset) {
this.charset = charset;
byteBufferCache = new ByteBufferCache();
Expand Down Expand Up @@ -163,6 +163,9 @@ public int isSupportedOption(String option) {
}
return -1;
}

public abstract boolean isDefaultBootClassPath();

// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="Encoding">
Expand Down
2 changes: 1 addition & 1 deletion langtools/test/tools/javac/6341866/T6341866.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ static boolean test(ImplicitType implicitType, AnnoType annoType) throws IOExcep
processorServices.delete();

List<String> opts = new ArrayList<String>();
opts.addAll(Arrays.asList("-d", ".", "-sourcepath", testSrc, "-classpath", testClasses, "-source", "1.6"));
opts.addAll(Arrays.asList("-d", ".", "-sourcepath", testSrc, "-classpath", testClasses, "-source", "1.6", "-Xlint:-options"));
if (implicitType.opt != null)
opts.add(implicitType.opt);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
* @bug 4249112 4785453
* @summary Verify that implicit member modifiers are set correctly.
*
* @compile/ref=MemberModifiers.out -source 1.4 -target 1.4.2 -XDdumpmodifiers=cfm MemberModifiers.java
* @compile/ref=MemberModifiers.out -source 1.4 -target 1.4.2 -Xlint:-options -XDdumpmodifiers=cfm MemberModifiers.java
*/

// Currently, we check only that members of final classes are not final.
Expand Down
34 changes: 34 additions & 0 deletions langtools/test/tools/javac/T6900037.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright (c) 2010, 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.
*/

/*
* @test
* @bug 6900037
* @summary javac should warn if earlier -source is used and bootclasspath not set
* @compile T6900037.java
* @compile -source 1.6 T6900037.java
* @compile/fail/ref=T6900037.out -XDrawDiagnostics -Werror -source 1.6 T6900037.java
* @compile -Werror -source 1.6 -Xlint:-options T6900037.java
*/

class T6900037 { }
4 changes: 4 additions & 0 deletions langtools/test/tools/javac/T6900037.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- compiler.warn.source.no.bootclasspath: 1.6
- compiler.err.warnings.and.werror
1 error
1 warning
4 changes: 2 additions & 2 deletions langtools/test/tools/javac/TryWithResources/PlainTry.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
* @bug 6911256 6964740
* @author Joseph D. Darcy
* @summary Test error messages for an unadorned try
* @compile/fail/ref=PlainTry6.out -XDrawDiagnostics -source 6 PlainTry.java
* @compile/fail/ref=PlainTry.out -XDrawDiagnostics PlainTry.java
* @compile/fail/ref=PlainTry6.out -XDrawDiagnostics -source 6 -Xlint:-options PlainTry.java
* @compile/fail/ref=PlainTry.out -XDrawDiagnostics PlainTry.java
*/
public class PlainTry {
public static void main(String... args) {
Expand Down
6 changes: 3 additions & 3 deletions langtools/test/tools/javac/annotations/neg/Dep.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@
* @summary Please add annotation <at>Deprecated to supplant the javadoc tag
* @author gafter
*
* @compile -source 1.4 -Xlint:dep-ann -Werror Dep.java
* @compile/fail -Xlint:dep-ann -Werror Dep.java
* @compile -Xlint:dep-ann Dep.java
* @compile -source 1.4 -Xlint:-options -Xlint:dep-ann -Werror Dep.java
* @compile/fail -Xlint:dep-ann -Werror Dep.java
* @compile -Xlint:dep-ann Dep.java
*/

/** @deprecated */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
*/

// key: compiler.err.annotations.not.supported.in.source
// options: -source 1.4
// options: -source 1.4 -Xlint:-options

@Deprecated
class AnnotationsNotSupported { }
Loading

0 comments on commit be8a607

Please sign in to comment.