if (!checkDirectory("-s"))
return null;
//如果命令行中没带-source与-target选项,则采用默认值
String sourceString = options.get("-source");
Source source = (sourceString != null)
//在这里lookup()一定不会返回null,因为在上面
//的option.process(options, flag, operand)时如果有错已经检测出来
? Source.lookup(sourceString)
: Source.DEFAULT;
String targetString = options.get("-target");
//在这里lookup()一定不会返回null,因为在上面
//的option.process(options, flag, operand)时如果有错已经检测出来
Target target = (targetString != null)
? Target.lookup(targetString)
: Target.DEFAULT;
// We don't check source/target consistency for CLDC, as J2ME
// profiles are not aligned with J2SE targets; moreover, a
// single CLDC target may have many profiles. In addition,
// this is needed for the continued functioning of the JSR14
// prototype.
DEBUG.P("sourceString="+sourceString);
DEBUG.P("source="+source);
DEBUG.P("source.requiredTarget()="+source.requiredTarget());
DEBUG.P("targetString="+targetString);
DEBUG.P("target="+target);
//如果是"-target jsr14",则不用执行下面的代码
//target的版本号总是围绕source的版本号而变动的
if (Character.isDigit(target.name.charAt(0))) {
//当target的版本号<source的版本号
if (target.compareTo(source.requiredTarget()) < 0) {
if (targetString != null) {
if (sourceString == null) {//指定-target,没指定-source的情况
/*错误例子:
F:\Javac>javac -target 1.4
javac: 目标版本 1.4 与默认的源版本 1.5 冲突
*/
warning("warn.target.default.source.conflict",
targetString,
source.requiredTarget().name);
} else {//指定-target,同时指定-source的情况
/*错误例子:
F:\Javac>javac -target 1.4 -source 1.5
javac: 源版本 1.5 需要目标版本 1.5
*/
warning("warn.source.target.conflict",
sourceString,
source.requiredTarget().name);
}
return null;
} else {
//没有指定-target时,target取默认版本号(javac1.7默认是1.6)
//如果默认版本号还比source低,则target版本号由source决定
options.put("-target", source.requiredTarget().name);
}
} else {
//当target的版本号>=source的版本号且用户没在
//javac命令行中指定“-target”选项,且不允许使用
//泛型时,target版本默认为1.4
if (targetString == null && !source.allowGenerics()) {
options.put("-target", Target.JDK1_4.name);
}
}
}
return filenames.toList();