--- a/langtools/make/build.properties Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/make/build.properties Thu Oct 23 13:43:56 2014 -0700
@@ -32,8 +32,8 @@
# boot.java.home = /opt/jdk/1.7.0
boot.java = ${boot.java.home}/bin/java
boot.javac = ${boot.java.home}/bin/javac
-boot.javac.source = 7
-boot.javac.target = 7
+boot.javac.source = 8
+boot.javac.target = 8
# This is the JDK used to run the product version of the tools,
# for example, for testing. If you're building a complete JDK, specify that.
--- a/langtools/make/tools/crules/MutableFieldsAnalyzer.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/make/tools/crules/MutableFieldsAnalyzer.java Thu Oct 23 13:43:56 2014 -0700
@@ -30,7 +30,6 @@
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.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.tree.TreeScanner;
@@ -38,6 +37,7 @@
import static com.sun.tools.javac.code.Flags.FINAL;
import static com.sun.tools.javac.code.Flags.STATIC;
import static com.sun.tools.javac.code.Flags.SYNTHETIC;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
public class MutableFieldsAnalyzer extends AbstractCodingRulesAnalyzer {
@@ -68,7 +68,7 @@
.contains(packageToCheck);
if (isJavacPack &&
(tree.sym.flags() & SYNTHETIC) == 0 &&
- tree.sym.owner.kind == Kinds.TYP) {
+ tree.sym.owner.kind == TYP) {
if (!ignoreField(tree.sym.owner.flatName().toString(),
tree.getName().toString())) {
boolean enumClass = (tree.sym.owner.flags() & ENUM) != 0;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java Thu Oct 23 13:43:56 2014 -0700
@@ -56,7 +56,6 @@
import com.sun.source.util.JavacTask;
import com.sun.source.util.TreePath;
import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.code.Symbol.MethodSymbol;
@@ -106,6 +105,7 @@
import com.sun.tools.javac.util.Names;
import com.sun.tools.javac.util.Pair;
import com.sun.tools.javac.util.Position;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.*;
/**
@@ -474,7 +474,7 @@
searched.add(tsym);
for (Symbol sym : tsym.members().getSymbolsByName(fieldName)) {
- if (sym.kind == Kinds.VAR) {
+ if (sym.kind == VAR) {
return (VarSymbol)sym;
}
}
@@ -516,7 +516,7 @@
/** @see com.sun.tools.javadoc.ClassDocImpl#findConstructor */
MethodSymbol findConstructor(ClassSymbol tsym, List<Type> paramTypes) {
for (Symbol sym : tsym.members().getSymbolsByName(names.init)) {
- if (sym.kind == Kinds.MTH) {
+ if (sym.kind == MTH) {
if (hasParameterTypes((MethodSymbol) sym, paramTypes)) {
return (MethodSymbol) sym;
}
@@ -557,7 +557,7 @@
// attempt to emulate the old behavior.
MethodSymbol lastFound = null;
for (Symbol sym : tsym.members().getSymbolsByName(methodName)) {
- if (sym.kind == Kinds.MTH) {
+ if (sym.kind == MTH) {
if (sym.name == methodName) {
lastFound = (MethodSymbol)sym;
}
@@ -569,7 +569,7 @@
} else {
for (Symbol sym : tsym.members().getSymbolsByName(methodName)) {
if (sym != null &&
- sym.kind == Kinds.MTH) {
+ sym.kind == MTH) {
if (hasParameterTypes((MethodSymbol) sym, paramTypes)) {
return (MethodSymbol) sym;
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Thu Oct 23 13:43:56 2014 -0700
@@ -43,7 +43,7 @@
import com.sun.tools.javac.util.*;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.main.Option.*;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Kinds.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Kinds.java Thu Oct 23 13:43:56 2014 -0700
@@ -26,11 +26,13 @@
package com.sun.tools.javac.code;
import java.util.EnumSet;
+import java.util.Set;
import java.util.Locale;
import com.sun.source.tree.MemberReferenceTree;
import com.sun.tools.javac.api.Formattable;
import com.sun.tools.javac.api.Messages;
+
import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.code.TypeTag.PACKAGE;
@@ -49,55 +51,166 @@
private Kinds() {} // uninstantiable
- /** The empty set of kinds.
- */
- public final static int NIL = 0;
-
- /** The kind of package symbols.
+ /**
+ * Kind of symbols.
+ *
+ * IMPORTANT: This is an ordered type. The ordering of
+ * declarations in this enum matters. Be careful when changing
+ * it.
*/
- public final static int PCK = 1 << 0;
+ public enum Kind {
+ NIL(Category.BASIC, KindSelector.NIL),
+ PCK(Category.BASIC, KindName.PACKAGE, KindSelector.PCK),
+ TYP(Category.BASIC, KindName.CLASS, KindSelector.TYP),
+ VAR(Category.BASIC, KindName.VAR, KindSelector.VAR),
+ MTH(Category.BASIC, KindName.METHOD, KindSelector.MTH),
+ POLY(Category.BASIC, KindSelector.POLY),
+ ERR(Category.ERROR, KindSelector.ERR),
+ AMBIGUOUS(Category.OVERLOAD),
+ HIDDEN(Category.OVERLOAD),
+ STATICERR(Category.OVERLOAD),
+ MISSING_ENCL(Category.OVERLOAD),
+ ABSENT_VAR(Category.OVERLOAD, KindName.VAR),
+ WRONG_MTHS(Category.OVERLOAD, KindName.METHOD),
+ WRONG_MTH(Category.OVERLOAD, KindName.METHOD),
+ ABSENT_MTH(Category.OVERLOAD, KindName.METHOD),
+ ABSENT_TYP(Category.OVERLOAD, KindName.CLASS),
+ WRONG_STATICNESS(Category.OVERLOAD, KindName.METHOD);
- /** The kind of type symbols (classes, interfaces and type variables).
- */
- public final static int TYP = 1 << 1;
+ // There are essentially two "levels" to the Kind datatype.
+ // The first is a totally-ordered set of categories of
+ // solutions. Within each category, we have more
+ // possibilities.
+ private enum Category {
+ BASIC, ERROR, OVERLOAD;
+ }
- /** The kind of variable symbols.
- */
- public final static int VAR = 1 << 2;
+ private final KindName kindName;
+ private final KindName absentKind;
+ private final KindSelector selector;
+ private final Category category;
+
+ private Kind(Category category) {
+ this(category, null, null, null);
+ }
+
+ private Kind(Category category,
+ KindSelector selector) {
+ this(category, null, null, selector);
+ }
+
+ private Kind(Category category,
+ KindName absentKind) {
+ this(category, null, absentKind, null);
+ }
- /** The kind of values (variables or non-variable expressions), includes VAR.
- */
- public final static int VAL = (1 << 3) | VAR;
+ private Kind(Category category,
+ KindName kindName,
+ KindSelector selector) {
+ this(category, kindName, null, selector);
+ }
- /** The kind of methods.
- */
- public final static int MTH = 1 << 4;
+ private Kind(Category category,
+ KindName kindName,
+ KindName absentKind,
+ KindSelector selector) {
+ this.category = category;
+ this.kindName = kindName;
+ this.absentKind = absentKind;
+ this.selector = selector;
+ }
+
+ public KindSelector toSelector() {
+ return selector;
+ }
+
+ public boolean matches(KindSelector kindSelectors) {
+ return selector.contains(kindSelectors);
+ }
- /** Poly kind, for deferred types.
- */
- public final static int POLY = 1 << 5;
+ public boolean isOverloadError() {
+ return category == Category.OVERLOAD;
+ }
+
+ public boolean isValid() {
+ return category == Category.BASIC;
+ }
+
+ public boolean betterThan(Kind other) {
+ return ordinal() < other.ordinal();
+ }
+
+ public KindName kindName() {
+ if (kindName == null) {
+ throw new AssertionError("Unexpected kind: " + this);
+ } else {
+ return kindName;
+ }
+ }
- /** The error kind, which includes all other kinds.
- */
- public final static int ERR = (1 << 6) - 1;
+ public KindName absentKind() {
+ if (absentKind == null) {
+ throw new AssertionError("Unexpected kind: " + this);
+ } else {
+ return absentKind;
+ }
+ }
+ }
- /** The set of all kinds.
- */
- public final static int AllKinds = ERR;
+ public static class KindSelector {
+
+ //basic selectors
+ public static final KindSelector NIL = new KindSelector(0);
+ public static final KindSelector PCK = new KindSelector(0x01);
+ public static final KindSelector TYP = new KindSelector(0x02);
+ public static final KindSelector VAR = new KindSelector(0x04);
+ public static final KindSelector VAL = new KindSelector(0x0c);
+ public static final KindSelector MTH = new KindSelector(0x10);
+ public static final KindSelector ERR = new KindSelector(0x3f);
+ public static final KindSelector POLY = new KindSelector(0x20);
- /** Kinds for erroneous symbols that complement the above
- */
- public static final int ERRONEOUS = 1 << 7;
- public static final int AMBIGUOUS = ERRONEOUS + 1; // ambiguous reference
- public static final int HIDDEN = ERRONEOUS + 2; // hidden method or field
- public static final int STATICERR = ERRONEOUS + 3; // nonstatic member from static context
- public static final int MISSING_ENCL = ERRONEOUS + 4; // missing enclosing class
- public static final int ABSENT_VAR = ERRONEOUS + 5; // missing variable
- public static final int WRONG_MTHS = ERRONEOUS + 6; // methods with wrong arguments
- public static final int WRONG_MTH = ERRONEOUS + 7; // one method with wrong arguments
- public static final int ABSENT_MTH = ERRONEOUS + 8; // missing method
- public static final int ABSENT_TYP = ERRONEOUS + 9; // missing type
- public static final int WRONG_STATICNESS = ERRONEOUS + 10; // wrong staticness for method references
+ //common derived selectors
+ public static final KindSelector TYP_PCK = of(TYP, PCK);
+ public static final KindSelector VAL_MTH = of(VAL, MTH);
+ public static final KindSelector VAL_POLY = of(VAL, POLY);
+ public static final KindSelector VAL_TYP = of(VAL, TYP);
+ public static final KindSelector VAL_TYP_PCK = of(VAL, TYP, PCK);
+
+ private final byte data;
+
+ private KindSelector(int data) {
+ this.data = (byte) data;
+ }
+
+ public static KindSelector of(KindSelector... kindSelectors) {
+ byte newData = 0;
+ for (KindSelector kindSel : kindSelectors) {
+ newData |= kindSel.data;
+ }
+ return new KindSelector(newData);
+ }
+
+ public boolean subset(KindSelector other) {
+ return (data & ~other.data) == 0;
+ }
+
+ public boolean contains(KindSelector other) {
+ return (data & other.data) != 0;
+ }
+
+ /** A set of KindName(s) representing a set of symbol's kinds. */
+ public Set<KindName> kindNames() {
+ EnumSet<KindName> kinds = EnumSet.noneOf(KindName.class);
+ if ((data & VAL.data) != 0) {
+ if ((data & VAL.data) == VAR.data) kinds.add(KindName.VAR);
+ else kinds.add(KindName.VAL);
+ }
+ if ((data & MTH.data) != 0) kinds.add(KindName.METHOD);
+ if ((data & TYP.data) != 0) kinds.add(KindName.CLASS);
+ if ((data & PCK.data) != 0) kinds.add(KindName.PACKAGE);
+ return kinds;
+ }
+ }
public enum KindName implements Formattable {
ANNOTATION("kindname.annotation"),
@@ -135,19 +248,6 @@
}
}
- /** A KindName representing a given symbol kind
- */
- public static KindName kindName(int kind) {
- switch (kind) {
- case PCK: return KindName.PACKAGE;
- case TYP: return KindName.CLASS;
- case VAR: return KindName.VAR;
- case VAL: return KindName.VAL;
- case MTH: return KindName.METHOD;
- default : throw new AssertionError("Unexpected kind: "+kind);
- }
- }
-
public static KindName kindName(MemberReferenceTree.ReferenceMode mode) {
switch (mode) {
case INVOKE: return KindName.METHOD;
@@ -195,27 +295,10 @@
return KindName.INSTANCE_INIT;
default:
- if (sym.kind == VAL)
- // I don't think this can happen but it can't harm
- // playing it safe --ahe
- return KindName.VAL;
- else
throw new AssertionError("Unexpected kind: "+sym.getKind());
}
}
- /** A set of KindName(s) representing a set of symbol's kinds.
- */
- public static EnumSet<KindName> kindNames(int kind) {
- EnumSet<KindName> kinds = EnumSet.noneOf(KindName.class);
- if ((kind & VAL) != 0)
- kinds.add(((kind & VAL) == VAR) ? KindName.VAR : KindName.VAL);
- if ((kind & MTH) != 0) kinds.add(KindName.METHOD);
- if ((kind & TYP) != 0) kinds.add(KindName.CLASS);
- if ((kind & PCK) != 0) kinds.add(KindName.PACKAGE);
- return kinds;
- }
-
/** A KindName representing the kind of a given class/interface type.
*/
public static KindName typeKindName(Type t) {
@@ -232,19 +315,4 @@
return KindName.CLASS;
}
- /** A KindName representing the kind of a missing symbol, given an
- * error kind.
- * */
- public static KindName absentKind(int kind) {
- switch (kind) {
- case ABSENT_VAR:
- return KindName.VAR;
- case WRONG_MTHS: case WRONG_MTH: case ABSENT_MTH: case WRONG_STATICNESS:
- return KindName.METHOD;
- case ABSENT_TYP:
- return KindName.CLASS;
- default:
- throw new AssertionError("Unexpected kind: "+kind);
- }
- }
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Printer.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Printer.java Thu Oct 23 13:43:56 2014 -0700
@@ -36,6 +36,7 @@
import static com.sun.tools.javac.code.BoundKind.*;
import static com.sun.tools.javac.code.Flags.*;
+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.FORALL;
@@ -224,7 +225,7 @@
@Override
public String visitClassType(ClassType t, Locale locale) {
StringBuilder buf = new StringBuilder();
- if (t.getEnclosingType().hasTag(CLASS) && t.tsym.owner.kind == Kinds.TYP) {
+ if (t.getEnclosingType().hasTag(CLASS) && t.tsym.owner.kind == TYP) {
buf.append(visit(t.getEnclosingType(), locale));
buf.append('.');
buf.append(printAnnotations(t));
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java Thu Oct 23 13:43:56 2014 -0700
@@ -45,6 +45,7 @@
import com.sun.tools.javac.util.Name;
import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.code.TypeTag.FORALL;
@@ -65,7 +66,7 @@
/** The kind of this symbol.
* @see Kinds
*/
- public int kind;
+ public Kind kind;
/** The flags of this symbol.
*/
@@ -232,7 +233,7 @@
/** Construct a symbol with given kind, flags, name, type and owner.
*/
- public Symbol(int kind, long flags, Name name, Type type, Symbol owner) {
+ public Symbol(Kind kind, long flags, Name name, Type type, Symbol owner) {
this.kind = kind;
this.flags_field = flags;
this.type = type;
@@ -268,7 +269,9 @@
*/
public Symbol location() {
if (owner.name == null || (owner.name.isEmpty() &&
- (owner.flags() & BLOCK) == 0 && owner.kind != PCK && owner.kind != TYP)) {
+ (owner.flags() & BLOCK) == 0 &&
+ owner.kind != PCK &&
+ owner.kind != TYP)) {
return null;
}
return owner;
@@ -344,8 +347,8 @@
*/
public boolean isLocal() {
return
- (owner.kind & (VAR | MTH)) != 0 ||
- (owner.kind == TYP && owner.isLocal());
+ (owner.kind.matches(KindSelector.VAL_MTH) ||
+ (owner.kind == TYP && owner.isLocal()));
}
/** Has this symbol an empty name? This includes anonymous
@@ -407,7 +410,7 @@
public ClassSymbol enclClass() {
Symbol c = this;
while (c != null &&
- ((c.kind & TYP) == 0 || !c.type.hasTag(CLASS))) {
+ (!c.kind.matches(KindSelector.TYP) || !c.type.hasTag(CLASS))) {
c = c.owner;
}
return (ClassSymbol)c;
@@ -669,16 +672,16 @@
/** A base class for Symbols representing types.
*/
public static abstract class TypeSymbol extends Symbol {
- public TypeSymbol(int kind, long flags, Name name, Type type, Symbol owner) {
+ public TypeSymbol(Kind kind, long flags, Name name, Type type, Symbol owner) {
super(kind, flags, name, type, owner);
}
/** form a fully qualified name from a name and an owner
*/
static public Name formFullName(Name name, Symbol owner) {
if (owner == null) return name;
- if (((owner.kind != ERR)) &&
- ((owner.kind & (VAR | MTH)) != 0
- || (owner.kind == TYP && owner.type.hasTag(TYPEVAR))
+ if ((owner.kind != ERR) &&
+ (owner.kind.matches(KindSelector.VAL_MTH) ||
+ (owner.kind == TYP && owner.type.hasTag(TYPEVAR))
)) return name;
Name prefix = owner.getQualifiedName();
if (prefix == null || prefix == prefix.table.names.empty)
@@ -690,9 +693,8 @@
* converting to flat representation
*/
static public Name formFlatName(Name name, Symbol owner) {
- if (owner == null ||
- (owner.kind & (VAR | MTH)) != 0
- || (owner.kind == TYP && owner.type.hasTag(TYPEVAR))
+ if (owner == null || owner.kind.matches(KindSelector.VAL_MTH) ||
+ (owner.kind == TYP && owner.type.hasTag(TYPEVAR))
) return name;
char sep = owner.kind == TYP ? '$' : '.';
Name prefix = owner.flatName();
@@ -1558,7 +1560,7 @@
// where
public static final Filter<Symbol> implementation_filter = new Filter<Symbol>() {
public boolean accepts(Symbol s) {
- return s.kind == Kinds.MTH &&
+ return s.kind == MTH &&
(s.flags() & SYNTHETIC) == 0;
}
};
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java Thu Oct 23 13:43:56 2014 -0700
@@ -64,8 +64,7 @@
import com.sun.tools.javac.util.Names;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.PCK;
-import static com.sun.tools.javac.code.Kinds.TYP;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.jvm.ByteCodes.*;
import static com.sun.tools.javac.code.TypeTag.*;
@@ -426,7 +425,7 @@
return messages.getLocalizedString("compiler.misc.unnamed.package");
}
};
- noSymbol = new TypeSymbol(Kinds.NIL, 0, names.empty, Type.noType, rootPackage) {
+ noSymbol = new TypeSymbol(NIL, 0, names.empty, Type.noType, rootPackage) {
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitUnknown(this, p);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java Thu Oct 23 13:43:56 2014 -0700
@@ -39,7 +39,7 @@
import com.sun.tools.javac.util.DefinedBy.Api;
import static com.sun.tools.javac.code.BoundKind.*;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.*;
/** This class represents Java types. The class itself defines the behavior of
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotations.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotations.java Thu Oct 23 13:43:56 2014 -0700
@@ -73,6 +73,8 @@
import com.sun.tools.javac.util.Names;
import com.sun.tools.javac.util.Options;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
/**
* Contains operations specific to processing type annotations.
* This class has two functions:
@@ -182,43 +184,43 @@
}
Attribute.Enum e = (Attribute.Enum) app;
if (e.value.name == names.TYPE) {
- if (s.kind == Kinds.TYP)
+ if (s.kind == TYP)
isDecl = true;
} else if (e.value.name == names.FIELD) {
- if (s.kind == Kinds.VAR &&
- s.owner.kind != Kinds.MTH)
+ if (s.kind == VAR &&
+ s.owner.kind != MTH)
isDecl = true;
} else if (e.value.name == names.METHOD) {
- if (s.kind == Kinds.MTH &&
+ if (s.kind == MTH &&
!s.isConstructor())
isDecl = true;
} else if (e.value.name == names.PARAMETER) {
- if (s.kind == Kinds.VAR &&
- s.owner.kind == Kinds.MTH &&
+ if (s.kind == VAR &&
+ s.owner.kind == MTH &&
(s.flags() & Flags.PARAMETER) != 0)
isDecl = true;
} else if (e.value.name == names.CONSTRUCTOR) {
- if (s.kind == Kinds.MTH &&
+ if (s.kind == MTH &&
s.isConstructor())
isDecl = true;
} else if (e.value.name == names.LOCAL_VARIABLE) {
- if (s.kind == Kinds.VAR &&
- s.owner.kind == Kinds.MTH &&
+ if (s.kind == VAR &&
+ s.owner.kind == MTH &&
(s.flags() & Flags.PARAMETER) == 0)
isDecl = true;
} else if (e.value.name == names.ANNOTATION_TYPE) {
- if (s.kind == Kinds.TYP &&
+ if (s.kind == TYP &&
(s.flags() & Flags.ANNOTATION) != 0)
isDecl = true;
} else if (e.value.name == names.PACKAGE) {
- if (s.kind == Kinds.PCK)
+ if (s.kind == PCK)
isDecl = true;
} else if (e.value.name == names.TYPE_USE) {
- if (s.kind == Kinds.TYP ||
- s.kind == Kinds.VAR ||
- (s.kind == Kinds.MTH && !s.isConstructor() &&
+ if (s.kind == TYP ||
+ s.kind == VAR ||
+ (s.kind == MTH && !s.isConstructor() &&
!s.type.getReturnType().hasTag(TypeTag.VOID)) ||
- (s.kind == Kinds.MTH && s.isConstructor()))
+ (s.kind == MTH && s.isConstructor()))
isType = true;
} else if (e.value.name == names.TYPE_PARAMETER) {
/* Irrelevant in this case */
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java Thu Oct 23 13:43:56 2014 -0700
@@ -46,6 +46,7 @@
import static com.sun.tools.javac.code.BoundKind.*;
import static com.sun.tools.javac.code.Flags.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.*;
import static com.sun.tools.javac.code.Symbol.*;
import static com.sun.tools.javac.code.Type.*;
@@ -667,7 +668,7 @@
//where
private Filter<Symbol> bridgeFilter = new Filter<Symbol>() {
public boolean accepts(Symbol t) {
- return t.kind == Kinds.MTH &&
+ return t.kind == MTH &&
t.name != names.init &&
t.name != names.clinit &&
(t.flags() & SYNTHETIC) == 0;
@@ -708,7 +709,7 @@
@Override
public boolean accepts(Symbol sym) {
- return sym.kind == Kinds.MTH &&
+ return sym.kind == MTH &&
(sym.flags() & (ABSTRACT | DEFAULT)) == ABSTRACT &&
!overridesObjectMethod(origin, sym) &&
(interfaceCandidates(origin.type, (MethodSymbol)sym).head.flags() & DEFAULT) == 0;
@@ -793,7 +794,6 @@
public boolean isSubtype(Type t, Type s, boolean capture) {
if (t == s)
return true;
-
if (s.isPartial())
return isSuperType(s, t);
@@ -2809,7 +2809,7 @@
}
public boolean accepts(Symbol s) {
- return s.kind == Kinds.MTH &&
+ return s.kind == MTH &&
s.name == msym.name &&
(s.flags() & SYNTHETIC) == 0 &&
s.isInheritedIn(site.tsym, Types.this) &&
@@ -3634,7 +3634,8 @@
for (Type erasedSupertype : mec) {
List<Type> lci = List.of(asSuper(ts[startIdx], erasedSupertype.tsym));
for (int i = startIdx + 1 ; i < ts.length ; i++) {
- lci = intersect(lci, List.of(asSuper(ts[i], erasedSupertype.tsym)));
+ Type superType = asSuper(ts[i], erasedSupertype.tsym);
+ lci = intersect(lci, superType != null ? List.of(superType) : List.<Type>nil());
}
candidates = candidates.appendList(lci);
}
@@ -4714,7 +4715,7 @@
Type outer = ct.getEnclosingType();
if (outer.allparams().nonEmpty()) {
boolean rawOuter =
- c.owner.kind == Kinds.MTH || // either a local class
+ c.owner.kind == MTH || // either a local class
c.name == types.names.empty; // or anonymous
assembleClassSig(rawOuter
? types.erasure(outer)
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java Thu Oct 23 13:43:56 2014 -0700
@@ -39,7 +39,7 @@
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.tree.JCTree.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.ARRAY;
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
@@ -458,7 +458,7 @@
Symbol sym = TreeInfo.symbol(tree);
if (sym == null ||
TreeInfo.nonstaticSelect(tree) ||
- sym.kind != Kinds.VAR ||
+ sym.kind != VAR ||
(sym.flags() & Flags.ENUM) == 0) {
log.error(tree.pos(), "enum.annotation.must.be.enum.constant");
return new Attribute.Error(result.getOriginalType());
@@ -657,7 +657,7 @@
nr_value_elems++;
if (nr_value_elems == 1 &&
- elm.kind == Kinds.MTH) {
+ elm.kind == MTH) {
containerValueSymbol = (MethodSymbol)elm;
} else {
error = true;
@@ -678,7 +678,7 @@
// validate that the 'value' element is a method
// probably "impossible" to fail this
- if (containerValueSymbol.kind != Kinds.MTH) {
+ if (containerValueSymbol.kind != MTH) {
log.error(pos,
"invalid.repeatable.annotation.invalid.value",
targetContainerType);
@@ -909,7 +909,7 @@
annotations.nonEmpty())
log.error(annotations.head.pos,
"already.annotated",
- kindName(s), s);
+ Kinds.kindName(s), s);
actualEnterAnnotations(annotations, localEnv, s);
} finally {
if (prevLint != null)
@@ -1066,7 +1066,7 @@
DiagnosticPosition prevPos = deferPos;
deferPos = tree.pos();
try {
- if (sym != null && sym.kind == Kinds.VAR) {
+ if (sym != null && sym.kind == VAR) {
// Don't visit a parameter once when the sym is the method
// and once when the sym is the parameter.
scan(tree.mods);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Oct 23 13:43:56 2014 -0700
@@ -57,7 +57,7 @@
import static com.sun.tools.javac.code.Flags.ANNOTATION;
import static com.sun.tools.javac.code.Flags.BLOCK;
import static com.sun.tools.javac.code.Kinds.*;
-import static com.sun.tools.javac.code.Kinds.ERRONEOUS;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.code.TypeTag.WILDCARD;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
@@ -147,12 +147,12 @@
useBeforeDeclarationWarning = options.isSet("useBeforeDeclarationWarning");
identifyLambdaCandidate = options.getBoolean("identifyLambdaCandidate", false);
- statInfo = new ResultInfo(NIL, Type.noType);
- varInfo = new ResultInfo(VAR, Type.noType);
- unknownExprInfo = new ResultInfo(VAL, Type.noType);
- unknownAnyPolyInfo = new ResultInfo(VAL, Infer.anyPoly);
- unknownTypeInfo = new ResultInfo(TYP, Type.noType);
- unknownTypeExprInfo = new ResultInfo(Kinds.TYP | Kinds.VAL, Type.noType);
+ statInfo = new ResultInfo(KindSelector.NIL, Type.noType);
+ varInfo = new ResultInfo(KindSelector.VAR, Type.noType);
+ unknownExprInfo = new ResultInfo(KindSelector.VAL, Type.noType);
+ unknownAnyPolyInfo = new ResultInfo(KindSelector.VAL, Infer.anyPoly);
+ unknownTypeInfo = new ResultInfo(KindSelector.TYP, Type.noType);
+ unknownTypeExprInfo = new ResultInfo(KindSelector.VAL_TYP, Type.noType);
recoveryInfo = new RecoveryInfo(deferredAttr.emptyDeferredAttrContext);
}
@@ -223,14 +223,17 @@
* @param ownkind The computed kind of the tree
* @param resultInfo The expected result of the tree
*/
- Type check(final JCTree tree, final Type found, final int ownkind, final ResultInfo resultInfo) {
+ Type check(final JCTree tree,
+ final Type found,
+ final KindSelector ownkind,
+ final ResultInfo resultInfo) {
InferenceContext inferenceContext = resultInfo.checkContext.inferenceContext();
Type owntype;
if (!found.hasTag(ERROR) && !resultInfo.pt.hasTag(METHOD) && !resultInfo.pt.hasTag(FORALL)) {
- if ((ownkind & ~resultInfo.pkind) != 0) {
+ if (!ownkind.subset(resultInfo.pkind)) {
log.error(tree.pos(), "unexpected.type",
- kindNames(resultInfo.pkind),
- kindName(ownkind));
+ 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
@@ -348,7 +351,8 @@
Name name = (Name)node.getIdentifier();
if (site.kind == PCK) {
env.toplevel.packge = (PackageSymbol)site;
- return rs.findIdentInPackage(env, (TypeSymbol)site, name, TYP | PCK);
+ return rs.findIdentInPackage(env, (TypeSymbol)site, name,
+ KindSelector.TYP_PCK);
} else {
env.enclClass.sym = (ClassSymbol)site;
return rs.findMemberType(env, site.asType(), name, (TypeSymbol)site);
@@ -357,7 +361,7 @@
@Override @DefinedBy(Api.COMPILER_TREE)
public Symbol visitIdentifier(IdentifierTree node, Env<AttrContext> env) {
- return rs.findIdent(env, (Name)node.getName(), TYP | PCK);
+ return rs.findIdent(env, (Name)node.getName(), KindSelector.TYP_PCK);
}
}
@@ -374,9 +378,9 @@
public Type attribImportQualifier(JCImport tree, Env<AttrContext> env) {
// Attribute qualifying package or class.
JCFieldAccess s = (JCFieldAccess)tree.qualid;
- return attribTree(s.selected,
- env,
- new ResultInfo(tree.staticImport ? TYP : (TYP | PCK),
+ return attribTree(s.selected, env,
+ new ResultInfo(tree.staticImport ?
+ KindSelector.TYP : KindSelector.TYP_PCK,
Type.noType));
}
@@ -431,15 +435,16 @@
}
class ResultInfo {
- final int pkind;
+ final KindSelector pkind;
final Type pt;
final CheckContext checkContext;
- ResultInfo(int pkind, Type pt) {
+ ResultInfo(KindSelector pkind, Type pt) {
this(pkind, pt, chk.basicHandler);
}
- protected ResultInfo(int pkind, Type pt, CheckContext checkContext) {
+ protected ResultInfo(KindSelector pkind,
+ Type pt, CheckContext checkContext) {
this.pkind = pkind;
this.pt = pt;
this.checkContext = checkContext;
@@ -474,7 +479,8 @@
class RecoveryInfo extends ResultInfo {
public RecoveryInfo(final DeferredAttr.DeferredAttrContext deferredAttrContext) {
- super(Kinds.VAL, Type.recoveryType, new Check.NestedCheckContext(chk.basicHandler) {
+ super(KindSelector.VAL, Type.recoveryType,
+ new Check.NestedCheckContext(chk.basicHandler) {
@Override
public DeferredAttr.DeferredAttrContext deferredAttrContext() {
return deferredAttrContext;
@@ -503,7 +509,7 @@
return resultInfo.pt;
}
- int pkind() {
+ KindSelector pkind() {
return resultInfo.pkind;
}
@@ -575,7 +581,7 @@
/** Derived visitor method: attribute an expression tree.
*/
public Type attribExpr(JCTree tree, Env<AttrContext> env, Type pt) {
- return attribTree(tree, env, new ResultInfo(VAL, !pt.hasTag(ERROR) ? pt : Type.noType));
+ return attribTree(tree, env, new ResultInfo(KindSelector.VAL, !pt.hasTag(ERROR) ? pt : Type.noType));
}
/** Derived visitor method: attribute an expression tree with
@@ -595,7 +601,7 @@
/** Derived visitor method: attribute a type tree.
*/
Type attribType(JCTree tree, Env<AttrContext> env, Type pt) {
- Type result = attribTree(tree, env, new ResultInfo(TYP, pt));
+ Type result = attribTree(tree, env, new ResultInfo(KindSelector.TYP, pt));
return result;
}
@@ -623,19 +629,19 @@
/** Attribute the arguments in a method call, returning the method kind.
*/
- int attribArgs(List<JCExpression> trees, Env<AttrContext> env, ListBuffer<Type> argtypes) {
- int kind = VAL;
+ KindSelector attribArgs(List<JCExpression> trees, Env<AttrContext> env, ListBuffer<Type> argtypes) {
+ boolean polykind = false;
for (JCExpression arg : trees) {
Type argtype;
if (allowPoly && deferredAttr.isDeferred(env, arg)) {
argtype = deferredAttr.new DeferredType(arg, env);
- kind |= POLY;
+ polykind = true;
} else {
argtype = chk.checkNonVoid(arg, attribTree(arg, env, unknownAnyPolyInfo));
}
argtypes.append(argtype);
}
- return kind;
+ return polykind ? KindSelector.VAL_POLY : KindSelector.VAL;
}
/** Attribute a type argument list, returning a list of types.
@@ -792,7 +798,7 @@
public void visitClassDef(JCClassDecl tree) {
// Local and anonymous classes have not been entered yet, so we need to
// do it now.
- if ((env.info.scope.owner.kind & (VAR | MTH)) != 0) {
+ if (env.info.scope.owner.kind.matches(KindSelector.VAL_MTH)) {
enter.classEnter(tree, env);
} else {
// If this class declaration is part of a class level annotation,
@@ -1282,7 +1288,10 @@
chk.basicHandler.report(pos, diags.fragment("try.not.applicable.to.type", details));
}
};
- ResultInfo twrResult = new ResultInfo(VAL, syms.autoCloseableType, twrContext);
+ ResultInfo twrResult =
+ new ResultInfo(KindSelector.VAL,
+ syms.autoCloseableType,
+ twrContext);
if (resource.hasTag(VARDEF)) {
attribStat(resource, tryEnv);
twrResult.check(resource, resource.type);
@@ -1314,7 +1323,7 @@
//multi-catch parameter is implicitly marked as final
c.param.sym.flags_field |= FINAL | UNION;
}
- if (c.param.sym.kind == Kinds.VAR) {
+ if (c.param.sym.kind == VAR) {
c.param.sym.setData(ElementKind.EXCEPTION_PARAMETER);
}
chk.checkType(c.param.vartype.pos(),
@@ -1399,7 +1408,7 @@
//constant folding
owntype = cfolder.coerce(condtype.isTrue() ? truetype : falsetype, owntype);
}
- result = check(tree, owntype, VAL, resultInfo);
+ result = check(tree, owntype, KindSelector.VAL, resultInfo);
}
//where
private boolean isBooleanOrNumeric(Env<AttrContext> env, JCExpression tree) {
@@ -1749,7 +1758,8 @@
// ...and check that it is legal in the current context.
// (this will also set the tree's type)
Type mpt = newMethodTemplate(resultInfo.pt, argtypes, typeargtypes);
- checkId(tree.meth, site, sym, localEnv, new ResultInfo(MTH, mpt));
+ checkId(tree.meth, site, sym, localEnv,
+ new ResultInfo(KindSelector.MTH, mpt));
}
// Otherwise, `site' is an error type and we do nothing
}
@@ -1757,7 +1767,7 @@
} else {
// Otherwise, we are seeing a regular method call.
// Attribute the arguments, yielding list of argument types, ...
- int kind = attribArgs(tree.args, localEnv, argtypesBuf);
+ KindSelector kind = attribArgs(tree.args, localEnv, argtypesBuf);
argtypes = argtypesBuf.toList();
typeargtypes = attribAnyTypes(tree.typeargs, localEnv);
@@ -1782,7 +1792,7 @@
// Check that value of resulting type is admissible in the
// current context. Also, capture the return type
- result = check(tree, capture(restype), VAL, resultInfo);
+ result = check(tree, capture(restype), KindSelector.VAL, resultInfo);
}
chk.validate(tree.typeargs, localEnv);
}
@@ -1936,7 +1946,8 @@
// Attribute constructor arguments.
ListBuffer<Type> argtypesBuf = new ListBuffer<>();
- int pkind = attribArgs(tree.args, localEnv, argtypesBuf);
+ final KindSelector pkind =
+ attribArgs(tree.args, localEnv, argtypesBuf);
List<Type> argtypes = argtypesBuf.toList();
List<Type> typeargtypes = attribTypes(tree.typeargs, localEnv);
@@ -2096,7 +2107,7 @@
clazztype = cdef.sym.type;
Symbol sym = tree.constructor = rs.resolveConstructor(
tree.pos(), localEnv, clazztype, argtypes, typeargtypes);
- Assert.check(sym.kind < AMBIGUOUS);
+ Assert.check(!sym.kind.isOverloadError());
tree.constructor = sym;
tree.constructorType = checkId(tree,
clazztype,
@@ -2108,7 +2119,7 @@
if (tree.constructor != null && tree.constructor.kind == MTH)
owntype = clazztype;
}
- result = check(tree, owntype, VAL, resultInfo);
+ result = check(tree, owntype, KindSelector.VAL, resultInfo);
chk.validate(tree.typeargs, localEnv);
}
//where
@@ -2118,7 +2129,7 @@
try {
//create a 'fake' diamond AST node by removing type-argument trees
ta.arguments = List.nil();
- ResultInfo findDiamondResult = new ResultInfo(VAL,
+ ResultInfo findDiamondResult = new ResultInfo(KindSelector.VAL,
resultInfo.checkContext.inferenceContext().free(resultInfo.pt) ? Type.noType : pt());
Type inferred = deferredAttr.attribSpeculative(tree, env, findDiamondResult).type;
Type polyPt = allowPoly ?
@@ -2209,7 +2220,7 @@
}
if (!types.isReifiable(elemtype))
log.error(tree.pos(), "generic.array.creation");
- result = check(tree, owntype, VAL, resultInfo);
+ result = check(tree, owntype, KindSelector.VAL, resultInfo);
}
/*
@@ -2318,7 +2329,8 @@
ResultInfo bodyResultInfo = lambdaType.getReturnType() == Type.recoveryType ?
recoveryInfo :
- new ResultInfo(VAL, lambdaType.getReturnType(), funcContext);
+ new ResultInfo(KindSelector.VAL,
+ lambdaType.getReturnType(), funcContext);
localEnv.info.returnResult = bodyResultInfo;
if (that.getBodyKind() == JCLambda.BodyKind.EXPRESSION) {
@@ -2328,7 +2340,7 @@
attribStats(body.stats, localEnv);
}
- result = check(that, currentTarget, VAL, resultInfo);
+ result = check(that, currentTarget, KindSelector.VAL, resultInfo);
boolean isSpeculativeRound =
resultInfo.checkContext.deferredAttrContext().mode == DeferredAttr.AttrMode.SPECULATIVE;
@@ -2349,7 +2361,7 @@
checkAccessibleTypes(that, localEnv, resultInfo.checkContext.inferenceContext(), lambdaType, currentTarget);
}
- result = check(that, currentTarget, VAL, resultInfo);
+ result = check(that, currentTarget, KindSelector.VAL, resultInfo);
} catch (Types.FunctionDescriptorLookupError ex) {
JCDiagnostic cause = ex.getDiagnostic();
resultInfo.checkContext.report(that, cause);
@@ -2802,7 +2814,7 @@
if (!isSpeculativeRound) {
checkAccessibleTypes(that, localEnv, resultInfo.checkContext.inferenceContext(), desc, currentTarget);
}
- result = check(that, currentTarget, VAL, resultInfo);
+ result = check(that, currentTarget, KindSelector.VAL, resultInfo);
} catch (Types.FunctionDescriptorLookupError ex) {
JCDiagnostic cause = ex.getDiagnostic();
resultInfo.checkContext.report(that, cause);
@@ -2813,7 +2825,9 @@
//where
ResultInfo memberReferenceQualifierResult(JCMemberReference tree) {
//if this is a constructor reference, the expected kind must be a type
- return new ResultInfo(tree.getMode() == ReferenceMode.INVOKE ? VAL | TYP : TYP, Type.noType);
+ return new ResultInfo(tree.getMode() == ReferenceMode.INVOKE ?
+ KindSelector.VAL_TYP : KindSelector.TYP,
+ Type.noType);
}
@@ -2912,7 +2926,7 @@
Type owntype = attribTree(tree.expr, env, resultInfo);
result = check(tree, owntype, pkind(), resultInfo);
Symbol sym = TreeInfo.symbol(tree);
- if (sym != null && (sym.kind&(TYP|PCK)) != 0)
+ if (sym != null && sym.kind.matches(KindSelector.TYP_PCK))
log.error(tree.pos(), "illegal.start.of.type");
}
@@ -2920,7 +2934,7 @@
Type owntype = attribTree(tree.lhs, env.dup(tree), varInfo);
Type capturedType = capture(owntype);
attribExpr(tree.rhs, env, owntype);
- result = check(tree, capturedType, VAL, resultInfo);
+ result = check(tree, capturedType, KindSelector.VAL, resultInfo);
}
public void visitAssignop(JCAssignOp tree) {
@@ -2945,7 +2959,7 @@
operator.type.getReturnType(),
owntype);
}
- result = check(tree, owntype, VAL, resultInfo);
+ result = check(tree, owntype, KindSelector.VAL, resultInfo);
}
public void visitUnary(JCUnary tree) {
@@ -2974,14 +2988,13 @@
}
}
}
- result = check(tree, owntype, VAL, resultInfo);
+ result = check(tree, owntype, KindSelector.VAL, resultInfo);
}
public void visitBinary(JCBinary tree) {
// Attribute arguments.
Type left = chk.checkNonVoid(tree.lhs.pos(), attribExpr(tree.lhs, env));
Type right = chk.checkNonVoid(tree.lhs.pos(), attribExpr(tree.rhs, env));
-
// Find operator.
Symbol operator = tree.operator =
rs.resolveBinaryOperator(tree.pos(), tree.getTag(), env, left, right);
@@ -3019,7 +3032,7 @@
chk.checkDivZero(tree.rhs.pos(), operator, right);
}
- result = check(tree, owntype, VAL, resultInfo);
+ result = check(tree, owntype, KindSelector.VAL, resultInfo);
}
public void visitTypeCast(final JCTypeCast tree) {
@@ -3034,7 +3047,8 @@
boolean isPoly = allowPoly && (expr.hasTag(LAMBDA) || expr.hasTag(REFERENCE));
if (isPoly) {
//expression is a poly - we need to propagate target type info
- castInfo = new ResultInfo(VAL, clazztype, new Check.NestedCheckContext(resultInfo.checkContext) {
+ castInfo = new ResultInfo(KindSelector.VAL, clazztype,
+ new Check.NestedCheckContext(resultInfo.checkContext) {
@Override
public boolean compatible(Type found, Type req, Warner warn) {
return types.isCastable(found, req, warn);
@@ -3048,14 +3062,14 @@
Type owntype = isPoly ? clazztype : chk.checkCastable(tree.expr.pos(), exprtype, clazztype);
if (exprtype.constValue() != null)
owntype = cfolder.coerce(exprtype, owntype);
- result = check(tree, capture(owntype), VAL, resultInfo);
+ result = check(tree, capture(owntype), KindSelector.VAL, resultInfo);
if (!isPoly)
chk.checkRedundantCast(localEnv, tree);
}
public void visitTypeTest(JCInstanceOf tree) {
Type exprtype = chk.checkNullOrRefType(
- tree.expr.pos(), attribExpr(tree.expr, env));
+ tree.expr.pos(), attribExpr(tree.expr, env));
Type clazztype = attribType(tree.clazz, env);
if (!clazztype.hasTag(TYPEVAR)) {
clazztype = chk.checkClassOrArrayType(tree.clazz.pos(), clazztype);
@@ -3066,7 +3080,7 @@
}
chk.validate(tree.clazz, env, false);
chk.checkCastable(tree.expr.pos(), exprtype, clazztype);
- result = check(tree, syms.booleanType, VAL, resultInfo);
+ result = check(tree, syms.booleanType, KindSelector.VAL, resultInfo);
}
public void visitIndexed(JCArrayAccess tree) {
@@ -3077,8 +3091,9 @@
owntype = types.elemtype(atype);
else if (!atype.hasTag(ERROR))
log.error(tree.pos(), "array.req.but.found", atype);
- if ((pkind() & VAR) == 0) owntype = capture(owntype);
- result = check(tree, owntype, VAR, resultInfo);
+ if (!pkind().contains(KindSelector.VAL))
+ owntype = capture(owntype);
+ result = check(tree, owntype, KindSelector.VAR, resultInfo);
}
public void visitIdent(JCIdent tree) {
@@ -3107,7 +3122,7 @@
Env<AttrContext> symEnv = env;
boolean noOuterThisPath = false;
if (env.enclClass.sym.owner.kind != PCK && // we are in an inner class
- (sym.kind & (VAR | MTH | TYP)) != 0 &&
+ sym.kind.matches(KindSelector.VAL_MTH) &&
sym.owner.kind == TYP &&
tree.name != names._this && tree.name != names._super) {
@@ -3130,7 +3145,7 @@
// If we are expecting a variable (as opposed to a value), check
// that the variable is assignable in the current environment.
- if (pkind() == VAR)
+ if (pkind() == KindSelector.VAR)
checkAssignable(tree.pos(), v, null, env);
}
@@ -3138,13 +3153,15 @@
// if symbol is a field or instance method, check that it is
// not accessed before the supertype constructor is called.
if ((symEnv.info.isSelfCall || noOuterThisPath) &&
- (sym.kind & (VAR | MTH)) != 0 &&
+ sym.kind.matches(KindSelector.VAL_MTH) &&
sym.owner.kind == TYP &&
(sym.flags() & STATIC) == 0) {
- chk.earlyRefError(tree.pos(), sym.kind == VAR ? sym : thisSym(tree.pos(), env));
+ chk.earlyRefError(tree.pos(), sym.kind == VAR ?
+ sym : thisSym(tree.pos(), env));
}
Env<AttrContext> env1 = env;
- if (sym.kind != ERR && sym.kind != TYP && sym.owner != null && sym.owner != env1.enclClass.sym) {
+ if (sym.kind != ERR && sym.kind != TYP &&
+ sym.owner != null && sym.owner != env1.enclClass.sym) {
// If the found symbol is inaccessible, then it is
// accessed through an enclosing instance. Locate this
// enclosing instance:
@@ -3161,24 +3178,27 @@
public void visitSelect(JCFieldAccess tree) {
// Determine the expected kind of the qualifier expression.
- int skind = 0;
+ KindSelector skind = KindSelector.NIL;
if (tree.name == names._this || tree.name == names._super ||
- tree.name == names._class)
+ tree.name == names._class)
{
- skind = TYP;
+ skind = KindSelector.TYP;
} else {
- if ((pkind() & PCK) != 0) skind = skind | PCK;
- if ((pkind() & TYP) != 0) skind = skind | TYP | PCK;
- if ((pkind() & (VAL | MTH)) != 0) skind = skind | VAL | TYP;
+ if (pkind().contains(KindSelector.PCK))
+ skind = KindSelector.of(skind, KindSelector.PCK);
+ if (pkind().contains(KindSelector.TYP))
+ skind = KindSelector.of(skind, KindSelector.TYP, KindSelector.PCK);
+ if (pkind().contains(KindSelector.VAL_MTH))
+ skind = KindSelector.of(skind, KindSelector.VAL, KindSelector.TYP);
}
// Attribute the qualifier expression, and determine its symbol (if any).
Type site = attribTree(tree.selected, env, new ResultInfo(skind, Infer.anyPoly));
- if ((pkind() & (PCK | TYP)) == 0)
+ if (!pkind().contains(KindSelector.TYP_PCK))
site = capture(site); // Capture field access
// don't allow T.class T[].class, etc
- if (skind == TYP) {
+ if (skind == KindSelector.TYP) {
Type elt = site;
while (elt.hasTag(ARRAY))
elt = ((ArrayType)elt).elemtype;
@@ -3202,7 +3222,7 @@
// Determine the symbol represented by the selection.
env.info.pendingResolutionPhase = null;
Symbol sym = selectSym(tree, sitesym, site, env, resultInfo);
- if (sym.exists() && !isType(sym) && (pkind() & (PCK | TYP)) != 0) {
+ if (sym.exists() && !isType(sym) && pkind().contains(KindSelector.TYP_PCK)) {
site = capture(site);
sym = selectSym(tree, sitesym, site, env, resultInfo);
}
@@ -3224,7 +3244,7 @@
// If we are expecting a variable (as opposed to a value), check
// that the variable is assignable in the current environment.
- if (pkind() == VAR)
+ if (pkind() == KindSelector.VAR)
checkAssignable(tree.pos(), v, tree.selected, env);
}
@@ -3239,9 +3259,11 @@
}
// Disallow selecting a type from an expression
- if (isType(sym) && (sitesym==null || (sitesym.kind&(TYP|PCK)) == 0)) {
+ if (isType(sym) && (sitesym == null || !sitesym.kind.matches(KindSelector.TYP_PCK))) {
tree.type = check(tree.selected, pt(),
- sitesym == null ? VAL : sitesym.kind, new ResultInfo(TYP|PCK, pt()));
+ sitesym == null ?
+ KindSelector.VAL : sitesym.kind.toSelector(),
+ new ResultInfo(KindSelector.TYP_PCK, pt()));
}
if (isType(sitesym)) {
@@ -3266,10 +3288,13 @@
sym.isStatic() && sym.kind == MTH) {
log.error(tree.pos(), "static.intf.method.invoke.not.supported.in.source", sourceName);
}
- } else if (sym.kind != ERR && (sym.flags() & STATIC) != 0 && sym.name != names._class) {
+ } else if (sym.kind != ERR &&
+ (sym.flags() & STATIC) != 0 &&
+ sym.name != names._class) {
// If the qualified item is not a type and the selected item is static, report
// a warning. Make allowance for the class of an array type e.g. Object[].class)
- chk.warnStatic(tree, "static.not.qualified.by.type", Kinds.kindName(sym.kind), sym.owner);
+ chk.warnStatic(tree, "static.not.qualified.by.type",
+ sym.kind.kindName(), sym.owner);
}
// If we are selecting an instance member via a `super', ...
@@ -3330,7 +3355,6 @@
} else {
// We are seeing a plain identifier as selector.
Symbol sym = rs.findIdentInType(env, site, name, resultInfo.pkind);
- if ((resultInfo.pkind & ERRONEOUS) == 0)
sym = rs.accessBase(sym, pos, location, site, name, true);
return sym;
}
@@ -3438,7 +3462,7 @@
Symbol sym,
Env<AttrContext> env,
ResultInfo resultInfo) {
- if ((resultInfo.pkind & POLY) != 0) {
+ if (resultInfo.pkind.contains(KindSelector.POLY)) {
Type pt = resultInfo.pt.map(deferredAttr.new RecoveryDeferredTypeMap(AttrMode.SPECULATIVE, sym, env.info.pendingResolutionPhase));
Type owntype = checkIdInternal(tree, site, sym, pt, env, resultInfo);
resultInfo.pt.map(deferredAttr.new RecoveryDeferredTypeMap(AttrMode.CHECK, sym, env.info.pendingResolutionPhase));
@@ -3503,7 +3527,7 @@
// Test (4): if symbol is an instance field of a raw type,
// which is being assigned to, issue an unchecked warning if
// its type changes under erasure.
- if (resultInfo.pkind == VAR &&
+ if (resultInfo.pkind == KindSelector.VAR &&
v.owner.kind == TYP &&
(v.flags() & STATIC) == 0 &&
(site.hasTag(CLASS) || site.hasTag(TYPEVAR))) {
@@ -3528,7 +3552,7 @@
if (v.getConstValue() != null && isStaticReference(tree))
owntype = owntype.constType(v.getConstValue());
- if (resultInfo.pkind == VAL) {
+ if (resultInfo.pkind == KindSelector.VAL) {
owntype = capture(owntype); // capture "names as expressions"
}
break;
@@ -3559,7 +3583,7 @@
// Test (3): if symbol is a variable, check that its type and
// kind are compatible with the prototype and protokind.
- return check(tree, owntype, sym.kind, resultInfo);
+ return check(tree, owntype, sym.kind.toSelector(), resultInfo);
}
/** Check that variable is initialized and evaluate the variable's
@@ -3799,8 +3823,8 @@
}
public void visitLiteral(JCLiteral tree) {
- result = check(
- tree, litType(tree.typetag).constType(tree.value), VAL, resultInfo);
+ result = check(tree, litType(tree.typetag).constType(tree.value),
+ KindSelector.VAL, resultInfo);
}
//where
/** Return the type of a literal with given type tag.
@@ -3810,13 +3834,13 @@
}
public void visitTypeIdent(JCPrimitiveTypeTree tree) {
- result = check(tree, syms.typeOfTag[tree.typetag.ordinal()], TYP, resultInfo);
+ result = check(tree, syms.typeOfTag[tree.typetag.ordinal()], KindSelector.TYP, resultInfo);
}
public void visitTypeArray(JCArrayTypeTree tree) {
Type etype = attribType(tree.elemtype, env);
Type type = new ArrayType(etype, syms.arrayClass);
- result = check(tree, type, TYP, resultInfo);
+ result = check(tree, type, KindSelector.TYP, resultInfo);
}
/** Visitor method for parameterized types.
@@ -3875,7 +3899,7 @@
owntype = types.createErrorType(tree.type);
}
}
- result = check(tree, owntype, TYP, resultInfo);
+ result = check(tree, owntype, KindSelector.TYP, resultInfo);
}
public void visitTypeUnion(JCTypeUnion tree) {
@@ -3912,7 +3936,8 @@
all_multicatchTypes.append(ctype);
}
}
- Type t = check(tree, types.lub(multicatchTypes.toList()), TYP, resultInfo);
+ Type t = check(tree, types.lub(multicatchTypes.toList()),
+ KindSelector.TYP, resultInfo);
if (t.hasTag(CLASS)) {
List<Type> alternatives =
((all_multicatchTypes == null) ? multicatchTypes : all_multicatchTypes).toList();
@@ -4016,7 +4041,7 @@
result = check(tree, new WildcardType(chk.checkRefType(tree.pos(), type),
tree.kind.kind,
syms.boundClass),
- TYP, resultInfo);
+ KindSelector.TYP, resultInfo);
}
public void visitAnnotation(JCAnnotation tree) {
@@ -4064,7 +4089,7 @@
public void visitErroneous(JCErroneous tree) {
if (tree.errs != null)
for (JCTree err : tree.errs)
- attribTree(err, env, new ResultInfo(ERR, pt()));
+ attribTree(err, env, new ResultInfo(KindSelector.ERR, pt()));
result = tree.type = syms.errType;
}
@@ -4315,7 +4340,7 @@
public static final Filter<Symbol> anyNonAbstractOrDefaultMethod = new Filter<Symbol>() {
@Override
public boolean accepts(Symbol s) {
- return s.kind == Kinds.MTH &&
+ return s.kind == MTH &&
(s.flags() & (DEFAULT | ABSTRACT)) != ABSTRACT;
}
};
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Oct 23 13:43:56 2014 -0700
@@ -54,6 +54,7 @@
import static com.sun.tools.javac.code.Flags.ANNOTATION;
import static com.sun.tools.javac.code.Flags.SYNCHRONIZED;
import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.code.TypeTag.WILDCARD;
@@ -349,7 +350,7 @@
for (Symbol sym : s.getSymbolsByName(v.name)) {
if (sym.owner != v.owner) break;
if (sym.kind == VAR &&
- (sym.owner.kind & (VAR | MTH)) != 0 &&
+ sym.owner.kind.matches(KindSelector.VAL_MTH) &&
v.name != names.error) {
duplicateError(pos, sym);
return;
@@ -367,7 +368,7 @@
for (Symbol sym : s.getSymbolsByName(c.name)) {
if (sym.owner != c.owner) break;
if (sym.kind == TYP && !sym.type.hasTag(TYPEVAR) &&
- (sym.owner.kind & (VAR | MTH)) != 0 &&
+ sym.owner.kind.matches(KindSelector.VAL_MTH) &&
c.name != names.error) {
duplicateError(pos, sym);
return;
@@ -2573,7 +2574,7 @@
void checkElemAccessFromSerializableLambda(final JCTree tree) {
if (warnOnAccessToSensitiveMembers) {
Symbol sym = TreeInfo.symbol(tree);
- if ((sym.kind & (VAR | MTH)) == 0) {
+ if (!sym.kind.matches(KindSelector.VAL_MTH)) {
return;
}
@@ -2599,7 +2600,7 @@
return false;
}
- while (sym.kind != Kinds.PCK) {
+ while (sym.kind != PCK) {
if ((sym.flags() & PUBLIC) == 0) {
return true;
}
@@ -2957,7 +2958,7 @@
Scope scope = container.members();
for(Symbol elm : scope.getSymbols()) {
if (elm.name != names.value &&
- elm.kind == Kinds.MTH &&
+ elm.kind == MTH &&
((MethodSymbol)elm).defaultValue == null) {
log.error(pos,
"invalid.repeatable.annotation.elem.nondefault",
@@ -3041,8 +3042,7 @@
else if (target == names.METHOD)
{ if (s.kind == MTH && !s.isConstructor()) return true; }
else if (target == names.PARAMETER)
- { if (s.kind == VAR &&
- s.owner.kind == MTH &&
+ { if (s.kind == VAR && s.owner.kind == MTH &&
(s.flags() & PARAMETER) != 0)
return true;
}
@@ -3060,8 +3060,7 @@
else if (target == names.PACKAGE)
{ if (s.kind == PCK) return true; }
else if (target == names.TYPE_USE)
- { if (s.kind == TYP ||
- s.kind == VAR ||
+ { if (s.kind == TYP || s.kind == VAR ||
(s.kind == MTH && !s.isConstructor() &&
!s.type.getReturnType().hasTag(VOID)) ||
(s.kind == MTH && s.isConstructor()))
@@ -3243,7 +3242,7 @@
try {
tsym.flags_field |= LOCKED;
for (Symbol s : tsym.members().getSymbols(NON_RECURSIVE)) {
- if (s.kind != Kinds.MTH)
+ if (s.kind != MTH)
continue;
checkAnnotationResType(pos, ((MethodSymbol)s).type.getReturnType());
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Thu Oct 23 13:43:56 2014 -0700
@@ -47,9 +47,10 @@
import java.util.Set;
import java.util.WeakHashMap;
-import static com.sun.tools.javac.code.Kinds.VAL;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
+import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
/**
* This is an helper class that is used to perform deferred type-analysis.
@@ -700,7 +701,7 @@
* which may happen if lambda's return type is an
* inference variable
*/
- Attr.ResultInfo bodyResultInfo = attr.new ResultInfo(VAL, Type.noType);
+ Attr.ResultInfo bodyResultInfo = attr.new ResultInfo(KindSelector.VAL, Type.noType);
localEnv.info.returnResult = bodyResultInfo;
// discard any log output
@@ -768,10 +769,10 @@
switch (lookupSym.kind) {
//note: as argtypes are erroneous types, type-errors must
//have been caused by arity mismatch
- case Kinds.ABSENT_MTH:
- case Kinds.WRONG_MTH:
- case Kinds.WRONG_MTHS:
- case Kinds.WRONG_STATICNESS:
+ case ABSENT_MTH:
+ case WRONG_MTH:
+ case WRONG_MTHS:
+ case WRONG_STATICNESS:
checkContext.report(tree, diags.fragment("incompatible.arg.types.in.mref"));
}
}
@@ -1185,7 +1186,7 @@
rs.getMemberReference(tree, localEnv, mref2,
exprTree.type, tree.name);
tree.sym = res;
- if (res.kind >= Kinds.ERRONEOUS ||
+ if (res.kind.isOverloadError() ||
res.type.hasTag(FORALL) ||
(res.flags() & Flags.VARARGS) != 0 ||
(TreeInfo.isStaticSelector(exprTree, tree.name.table.names) &&
@@ -1380,13 +1381,13 @@
*/
<E> E analyzeCandidateMethods(Symbol sym, E defaultValue, MethodAnalyzer<E> analyzer) {
switch (sym.kind) {
- case Kinds.MTH:
+ case MTH:
return analyzer.process((MethodSymbol) sym);
- case Kinds.AMBIGUOUS:
+ case AMBIGUOUS:
Resolve.AmbiguityError err = (Resolve.AmbiguityError)sym.baseSymbol();
E res = defaultValue;
for (Symbol s : err.ambiguousSyms) {
- if (s.kind == Kinds.MTH) {
+ if (s.kind == MTH) {
res = analyzer.reduce(res, analyzer.process((MethodSymbol) s));
if (analyzer.shouldStop(res))
return res;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java Thu Oct 23 13:43:56 2014 -0700
@@ -30,6 +30,7 @@
import javax.tools.JavaFileManager;
import com.sun.tools.javac.code.*;
+import com.sun.tools.javac.code.Kinds.KindSelector;
import com.sun.tools.javac.code.Scope.*;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Type.*;
@@ -43,7 +44,7 @@
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
/** This class enters symbols for all encountered definitions into
* the symbol table. The pass consists of two phases, organized as
@@ -402,7 +403,7 @@
// which contains this class in a non-static context
// (its "enclosing instance class"), provided such a class exists.
Symbol owner1 = owner;
- while ((owner1.kind & (VAR | MTH)) != 0 &&
+ while (owner1.kind.matches(KindSelector.VAL_MTH) &&
(owner1.flags_field & STATIC) == 0) {
owner1 = owner1.owner;
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java Thu Oct 23 13:43:56 2014 -0700
@@ -40,7 +40,7 @@
import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Flags.BLOCK;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.BOOLEAN;
import static com.sun.tools.javac.code.TypeTag.VOID;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Thu Oct 23 13:43:56 2014 -0700
@@ -177,7 +177,6 @@
resolveContext.methodCheck.argumentsAcceptable(env, deferredAttrContext, //B2
argtypes, mt.getParameterTypes(), warn);
-
if (allowGraphInference &&
resultInfo != null &&
!warn.hasNonSilentLint(Lint.LintCategory.UNCHECKED)) {
@@ -867,7 +866,10 @@
while (tmpTail.nonEmpty()) {
Type b1 = boundList.head;
Type b2 = tmpTail.head;
- if (b1 != b2) {
+ /* This wildcard check is temporary workaround. This code may need to be
+ * revisited once spec bug JDK-7034922 is fixed.
+ */
+ if (b1 != b2 && !b1.hasTag(WILDCARD) && !b2.hasTag(WILDCARD)) {
for (Pair<Type, Type> commonSupers : infer.getParameterizedSupers(b1, b2)) {
List<Type> allParamsSuperBound1 = commonSupers.fst.allparams();
List<Type> allParamsSuperBound2 = commonSupers.snd.allparams();
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Thu Oct 23 13:43:56 2014 -0700
@@ -30,7 +30,6 @@
import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.tree.TreeTranslator;
import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Scope.WriteableScope;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
@@ -58,7 +57,7 @@
import static com.sun.tools.javac.comp.LambdaToMethod.LambdaSymbolKind.*;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
@@ -727,7 +726,7 @@
* with the generated signature.
*/
private List<JCExpression> convertArgs(Symbol meth, List<JCExpression> args, Type varargsElement) {
- Assert.check(meth.kind == Kinds.MTH);
+ Assert.check(meth.kind == MTH);
List<Type> formals = types.erasure(meth.type).getParameterTypes();
if (varargsElement != null) {
Assert.check((meth.flags() & VARARGS) != 0);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java Thu Oct 23 13:43:56 2014 -0700
@@ -28,6 +28,7 @@
import java.util.*;
import com.sun.tools.javac.code.*;
+import com.sun.tools.javac.code.Kinds.KindSelector;
import com.sun.tools.javac.code.Scope.WriteableScope;
import com.sun.tools.javac.jvm.*;
import com.sun.tools.javac.main.Option.PkgInfo;
@@ -45,9 +46,9 @@
import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Flags.BLOCK;
-import static com.sun.tools.javac.code.Kinds.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.jvm.ByteCodes.*;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
@@ -358,10 +359,10 @@
return null;
}
Symbol currentOwner = c.owner;
- while ((currentOwner.owner.kind & TYP) != 0 && currentOwner.isLocal()) {
+ while (currentOwner.owner.kind.matches(KindSelector.TYP) && currentOwner.isLocal()) {
currentOwner = currentOwner.owner;
}
- if ((currentOwner.owner.kind & (VAR | MTH)) != 0 && c.isSubClass(currentOwner, types)) {
+ if (currentOwner.owner.kind.matches(KindSelector.VAL_MTH) && c.isSubClass(currentOwner, types)) {
return (ClassSymbol)currentOwner;
}
return null;
@@ -376,7 +377,7 @@
if (fvs != null) {
return fvs;
}
- if ((c.owner.kind & (VAR | MTH)) != 0) {
+ if (c.owner.kind.matches(KindSelector.VAL_MTH)) {
FreeVarCollector collector = new FreeVarCollector(c);
collector.scan(classDef(c));
fvs = collector.fvs;
@@ -2090,7 +2091,7 @@
ClassSymbol c = types.boxedClass(type);
Symbol typeSym =
rs.accessBase(
- rs.findIdentInType(attrEnv, c.type, names.TYPE, VAR),
+ rs.findIdentInType(attrEnv, c.type, names.TYPE, KindSelector.VAR),
pos, c.type, names.TYPE, true);
if (typeSym.kind == VAR)
((VarSymbol)typeSym).getConstValue(); // ensure initializer is evaluated
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Thu Oct 23 13:43:56 2014 -0700
@@ -48,8 +48,9 @@
import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Flags.ANNOTATION;
+import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.Kinds.*;
-import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
+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 static com.sun.tools.javac.code.TypeTag.TYPEVAR;
@@ -341,7 +342,7 @@
ImportFilter typeImportFilter = new ImportFilter() {
@Override
public boolean accepts(Scope origin, Symbol t) {
- return t.kind == Kinds.TYP;
+ return t.kind == TYP;
}
};
@@ -575,7 +576,8 @@
localEnv.enclMethod = tree;
if (tree.sym.type != null) {
//when this is called in the enter stage, there's no type to be set
- localEnv.info.returnResult = attr.new ResultInfo(VAL, tree.sym.type.getReturnType());
+ localEnv.info.returnResult = attr.new ResultInfo(KindSelector.VAL,
+ tree.sym.type.getReturnType());
}
if ((tree.mods.flags & STATIC) != 0) localEnv.info.staticLevel++;
return localEnv;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Thu Oct 23 13:43:56 2014 -0700
@@ -55,6 +55,7 @@
import java.util.Arrays;
import java.util.Collection;
+import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -65,7 +66,7 @@
import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Flags.BLOCK;
import static com.sun.tools.javac.code.Kinds.*;
-import static com.sun.tools.javac.code.Kinds.ERRONEOUS;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.comp.Resolve.MethodResolutionPhase.*;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
@@ -154,6 +155,11 @@
return instance;
}
+ private static Symbol bestOf(Symbol s1,
+ Symbol s2) {
+ return s1.kind.betterThan(s2.kind) ? s1 : s2;
+ }
+
// <editor-fold defaultstate="collapsed" desc="Verbose resolution diagnostics support">
enum VerboseResolutionMode {
SUCCESS("success"),
@@ -192,7 +198,7 @@
void reportVerboseResolutionDiagnostic(DiagnosticPosition dpos, Name name, Type site,
List<Type> argtypes, List<Type> typeargtypes, Symbol bestSoFar) {
- boolean success = bestSoFar.kind < ERRONEOUS;
+ boolean success = !bestSoFar.kind.isOverloadError();
if (success && !verboseResolutionMode.contains(VerboseResolutionMode.SUCCESS)) {
return;
@@ -517,7 +523,6 @@
boolean allowBoxing,
boolean useVarargs,
Warner warn) throws Infer.InferenceException {
-
Type mt = types.memberType(site, m);
// tvars is the list of formal type variables for which type arguments
// need to inferred.
@@ -536,9 +541,10 @@
while (formals.nonEmpty() && actuals.nonEmpty()) {
List<Type> bounds = types.subst(types.getBounds((TypeVar)formals.head),
pmt.tvars, typeargtypes);
- for (; bounds.nonEmpty(); bounds = bounds.tail)
+ for (; bounds.nonEmpty(); bounds = bounds.tail) {
if (!types.isSubtypeUnchecked(actuals.head, bounds.head, warn))
throw inapplicableMethodException.setMessage("explicit.param.do.not.conform.to.bounds",actuals.head, bounds);
+ }
formals = formals.tail;
actuals = actuals.tail;
}
@@ -558,7 +564,7 @@
if (l.head.hasTag(FORALL)) instNeeded = true;
}
- if (instNeeded)
+ if (instNeeded) {
return infer.instantiateMethod(env,
tvars,
(MethodType)mt,
@@ -569,6 +575,7 @@
useVarargs,
currentResolutionContext,
warn);
+ }
DeferredAttr.DeferredAttrContext dc = currentResolutionContext.deferredAttrContext(m, infer.emptyContext, resultInfo, warn);
currentResolutionContext.methodCheck.argumentsAcceptable(env, dc,
@@ -992,7 +999,7 @@
class MethodResultInfo extends ResultInfo {
public MethodResultInfo(Type pt, CheckContext checkContext) {
- attr.super(VAL, pt, checkContext);
+ attr.super(KindSelector.VAL, pt, checkContext);
}
@Override
@@ -1071,7 +1078,7 @@
*/
ResultInfo methodCheckResult(Type to, DeferredAttr.DeferredAttrContext deferredAttrContext,
Warner rsWarner, Type actual) {
- return attr.new ResultInfo(Kinds.VAL, to,
+ return attr.new ResultInfo(KindSelector.VAL, to,
new MostSpecificCheckContext(strict, deferredAttrContext, rsWarner, actual));
}
@@ -1304,7 +1311,7 @@
Type st = types.supertype(c.type);
if (st != null && (st.hasTag(CLASS) || st.hasTag(TYPEVAR))) {
sym = findField(env, site, name, st.tsym);
- if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ bestSoFar = bestOf(bestSoFar, sym);
}
for (List<Type> l = types.interfaces(c.type);
bestSoFar.kind != AMBIGUOUS && l.nonEmpty();
@@ -1313,8 +1320,8 @@
if (bestSoFar.exists() && sym.exists() &&
sym.owner != bestSoFar.owner)
bestSoFar = new AmbiguityError(bestSoFar, sym);
- else if (sym.kind < bestSoFar.kind)
- bestSoFar = sym;
+ else
+ bestSoFar = bestOf(bestSoFar, sym);
}
return bestSoFar;
}
@@ -1364,8 +1371,8 @@
return new StaticError(sym);
else
return sym;
- } else if (sym.kind < bestSoFar.kind) {
- bestSoFar = sym;
+ } else {
+ bestSoFar = bestOf(bestSoFar, sym);
}
if ((env1.enclClass.sym.flags() & STATIC) != 0) staticOnly = true;
@@ -1383,10 +1390,11 @@
for (Symbol currentSymbol : sc.getSymbolsByName(name)) {
if (currentSymbol.kind != VAR)
continue;
- // invariant: sym.kind == VAR
- if (bestSoFar.kind < AMBIGUOUS && currentSymbol.owner != bestSoFar.owner)
+ // invariant: sym.kind == Symbol.Kind.VAR
+ if (!bestSoFar.kind.isOverloadError() &&
+ currentSymbol.owner != bestSoFar.owner)
return new AmbiguityError(bestSoFar, currentSymbol);
- else if (bestSoFar.kind >= VAR) {
+ else if (!bestSoFar.kind.betterThan(VAR)) {
origin = sc.getOrigin(currentSymbol).owner;
bestSoFar = isAccessible(env, origin.type, currentSymbol)
? currentSymbol : new AccessError(env, origin.type, currentSymbol);
@@ -1427,11 +1435,11 @@
!sym.isInheritedIn(site.tsym, types)) {
return bestSoFar;
} else if (useVarargs && (sym.flags() & VARARGS) == 0) {
- return bestSoFar.kind >= ERRONEOUS ?
+ return bestSoFar.kind.isOverloadError() ?
new BadVarargsMethod((ResolveError)bestSoFar.baseSymbol()) :
bestSoFar;
}
- Assert.check(sym.kind < AMBIGUOUS);
+ Assert.check(!sym.kind.isOverloadError());
try {
Type mt = rawInstantiate(env, site, sym, null, argtypes, typeargtypes,
allowBoxing, useVarargs, types.noWarnings);
@@ -1455,7 +1463,7 @@
? new AccessError(env, site, sym)
: bestSoFar;
}
- return (bestSoFar.kind > AMBIGUOUS)
+ return (bestSoFar.kind.isOverloadError() && bestSoFar.kind != AMBIGUOUS)
? sym
: mostSpecific(argtypes, sym, bestSoFar, env, site,
allowBoxing && operator, useVarargs);
@@ -1689,6 +1697,7 @@
boolean operator) {
@SuppressWarnings({"unchecked","rawtypes"})
List<Type>[] itypes = (List<Type>[])new List[] { List.<Type>nil(), List.<Type>nil() };
+
InterfaceLookupPhase iphase = InterfaceLookupPhase.ABSTRACT_OK;
for (TypeSymbol s : superclasses(intype)) {
bestSoFar = findMethodInScope(env, site, name, argtypes, typeargtypes,
@@ -1702,7 +1711,7 @@
}
}
- Symbol concrete = bestSoFar.kind < ERR &&
+ Symbol concrete = bestSoFar.kind.isValid() &&
(bestSoFar.flags() & ABSTRACT) == 0 ?
bestSoFar : methodNotFound;
@@ -1715,7 +1724,8 @@
bestSoFar = findMethodInScope(env, site, name, argtypes, typeargtypes,
itype.tsym.members(), bestSoFar, allowBoxing, useVarargs, operator, true);
if (concrete != bestSoFar &&
- concrete.kind < ERR && bestSoFar.kind < ERR &&
+ concrete.kind.isValid() &&
+ bestSoFar.kind.isValid() &&
types.isSubSignature(concrete.type, bestSoFar.type)) {
//this is an hack - as javac does not do full membership checks
//most specific ends up comparing abstract methods that might have
@@ -1832,8 +1842,8 @@
sym.owner.kind == TYP &&
(sym.flags() & STATIC) == 0) return new StaticError(sym);
else return sym;
- } else if (sym.kind < bestSoFar.kind) {
- bestSoFar = sym;
+ } else {
+ bestSoFar = bestOf(bestSoFar, sym);
}
if ((env1.enclClass.sym.flags() & STATIC) != 0) staticOnly = true;
env1 = env1.outer;
@@ -1936,17 +1946,18 @@
Type st = types.supertype(c.type);
if (st != null && st.hasTag(CLASS)) {
sym = findMemberType(env, site, name, st.tsym);
- if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ bestSoFar = bestOf(bestSoFar, sym);
}
for (List<Type> l = types.interfaces(c.type);
bestSoFar.kind != AMBIGUOUS && l.nonEmpty();
l = l.tail) {
sym = findMemberType(env, site, name, l.head.tsym);
- if (bestSoFar.kind < AMBIGUOUS && sym.kind < AMBIGUOUS &&
+ if (!bestSoFar.kind.isOverloadError() &&
+ !sym.kind.isOverloadError() &&
sym.owner != bestSoFar.owner)
bestSoFar = new AmbiguityError(bestSoFar, sym);
- else if (sym.kind < bestSoFar.kind)
- bestSoFar = sym;
+ else
+ bestSoFar = bestOf(bestSoFar, sym);
}
return bestSoFar;
}
@@ -1985,8 +1996,8 @@
if (bestSoFar.kind == TYP && sym.kind == TYP &&
bestSoFar != sym)
return new AmbiguityError(bestSoFar, sym);
- else if (sym.kind < bestSoFar.kind)
- bestSoFar = sym;
+ else
+ bestSoFar = bestOf(bestSoFar, sym);
}
return bestSoFar;
}
@@ -2041,7 +2052,7 @@
sym.type.getEnclosingType().isParameterized())
return new StaticError(sym);
else if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
JCClassDecl encl = env1.baseClause ? (JCClassDecl)env1.tree : env1.enclClass;
if ((encl.sym.flags() & STATIC) != 0)
@@ -2051,15 +2062,15 @@
if (!env.tree.hasTag(IMPORT)) {
sym = findGlobalType(env, env.toplevel.namedImportScope, name);
if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
sym = findGlobalType(env, env.toplevel.packge.members(), name);
if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
sym = findGlobalType(env, env.toplevel.starImportScope, name);
if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
}
return bestSoFar;
@@ -2071,23 +2082,25 @@
* @param kind Indicates the possible symbol kinds
* (a subset of VAL, TYP, PCK).
*/
- Symbol findIdent(Env<AttrContext> env, Name name, int kind) {
+ Symbol findIdent(Env<AttrContext> env, Name name, KindSelector kind) {
Symbol bestSoFar = typeNotFound;
Symbol sym;
- if ((kind & VAR) != 0) {
+ if (kind.contains(KindSelector.VAL)) {
sym = findVar(env, name);
if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
}
- if ((kind & TYP) != 0) {
+ if (kind.contains(KindSelector.TYP)) {
sym = findType(env, name);
+
if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
}
- if ((kind & PCK) != 0) return syms.enterPackage(name);
+ if (kind.contains(KindSelector.PCK))
+ return syms.enterPackage(name);
else return bestSoFar;
}
@@ -2098,21 +2111,21 @@
* (a nonempty subset of TYP, PCK).
*/
Symbol findIdentInPackage(Env<AttrContext> env, TypeSymbol pck,
- Name name, int kind) {
+ Name name, KindSelector kind) {
Name fullname = TypeSymbol.formFullName(name, pck);
Symbol bestSoFar = typeNotFound;
PackageSymbol pack = null;
- if ((kind & PCK) != 0) {
+ if (kind.contains(KindSelector.PCK)) {
pack = syms.enterPackage(fullname);
if (pack.exists()) return pack;
}
- if ((kind & TYP) != 0) {
+ if (kind.contains(KindSelector.TYP)) {
Symbol sym = loadClass(env, fullname);
if (sym.exists()) {
// don't allow programs to use flatnames
if (name == sym.name) return sym;
}
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
}
return (pack != null) ? pack : bestSoFar;
}
@@ -2125,19 +2138,19 @@
* (a subset of VAL, TYP).
*/
Symbol findIdentInType(Env<AttrContext> env, Type site,
- Name name, int kind) {
+ Name name, KindSelector kind) {
Symbol bestSoFar = typeNotFound;
Symbol sym;
- if ((kind & VAR) != 0) {
+ if (kind.contains(KindSelector.VAL)) {
sym = findField(env, site, name, site.tsym);
if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
}
- if ((kind & TYP) != 0) {
+ if (kind.contains(KindSelector.TYP)) {
sym = findMemberType(env, site, name, site.tsym);
if (sym.exists()) return sym;
- else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
+ else bestSoFar = bestOf(bestSoFar, sym);
}
return bestSoFar;
}
@@ -2175,7 +2188,7 @@
List<Type> argtypes,
List<Type> typeargtypes,
LogResolveHelper logResolveHelper) {
- if (sym.kind >= AMBIGUOUS) {
+ if (sym.kind.isOverloadError()) {
ResolveError errSym = (ResolveError)sym.baseSymbol();
sym = errSym.access(name, qualified ? site.tsym : syms.noSymbol);
argtypes = logResolveHelper.getArgumentTypes(errSym, sym, name, argtypes);
@@ -2307,7 +2320,7 @@
* @param kind The set of admissible symbol kinds for the identifier.
*/
Symbol resolveIdent(DiagnosticPosition pos, Env<AttrContext> env,
- Name name, int kind) {
+ Name name, KindSelector kind) {
return accessBase(
findIdent(env, name, kind),
pos, env.enclClass.sym.type, name, false);
@@ -2367,7 +2380,7 @@
}
@Override
Symbol access(Env<AttrContext> env, DiagnosticPosition pos, Symbol location, Symbol sym) {
- if (sym.kind >= AMBIGUOUS) {
+ if (sym.kind.isOverloadError()) {
sym = super.access(env, pos, location, sym);
} else if (allowMethodHandles) {
MethodSymbol msym = (MethodSymbol)sym;
@@ -2524,8 +2537,9 @@
}
@Override
Symbol access(Env<AttrContext> env, DiagnosticPosition pos, Symbol location, Symbol sym) {
- if (sym.kind >= AMBIGUOUS) {
- if (sym.kind != WRONG_MTH && sym.kind != WRONG_MTHS) {
+ if (sym.kind.isOverloadError()) {
+ if (sym.kind != WRONG_MTH &&
+ sym.kind != WRONG_MTHS) {
sym = super.access(env, pos, location, sym);
} else {
final JCDiagnostic details = sym.kind == WRONG_MTH ?
@@ -2713,7 +2727,7 @@
if (isStaticSelector &&
!name.equals(names.init) &&
!boundSym.isStatic() &&
- boundSym.kind < ERRONEOUS) {
+ !boundSym.kind.isOverloadError()) {
boundSym = methodNotFound;
}
@@ -2726,7 +2740,7 @@
unboundSym = lookupMethod(unboundEnv, env.tree.pos(), site.tsym,
arityMethodCheck, unboundLookupHelper);
if (unboundSym.isStatic() &&
- unboundSym.kind < ERRONEOUS) {
+ !unboundSym.kind.isOverloadError()) {
unboundSym = methodNotFound;
}
}
@@ -2801,11 +2815,11 @@
boundSearchResultKind = SearchResultKind.BAD_MATCH_MORE_SPECIFIC;
} else {
boundSearchResultKind = SearchResultKind.BAD_MATCH;
- if (boundSym.kind < ERRONEOUS) {
+ if (!boundSym.kind.isOverloadError()) {
boundSym = methodWithCorrectStaticnessNotFound;
}
}
- } else if (boundSym.kind < ERRONEOUS) {
+ } else if (!boundSym.kind.isOverloadError()) {
boundSearchResultKind = SearchResultKind.GOOD_MATCH;
}
}
@@ -2835,11 +2849,11 @@
unboundSearchResultKind = SearchResultKind.BAD_MATCH_MORE_SPECIFIC;
} else {
unboundSearchResultKind = SearchResultKind.BAD_MATCH;
- if (unboundSym.kind < ERRONEOUS) {
+ if (!unboundSym.kind.isOverloadError()) {
unboundSym = methodWithCorrectStaticnessNotFound;
}
}
- } else if (unboundSym.kind < ERRONEOUS) {
+ } else if (!unboundSym.kind.isOverloadError()) {
unboundSearchResultKind = SearchResultKind.GOOD_MATCH;
}
}
@@ -2849,7 +2863,8 @@
//merge results
Pair<Symbol, ReferenceLookupHelper> res;
Symbol bestSym = choose(boundSym, unboundSym);
- if (bestSym.kind < ERRONEOUS && (staticErrorForBound || staticErrorForUnbound)) {
+ if (!bestSym.kind.isOverloadError() &&
+ (staticErrorForBound || staticErrorForUnbound)) {
if (staticErrorForBound) {
boundSym = methodWithCorrectStaticnessNotFound;
}
@@ -2983,7 +2998,7 @@
*/
final boolean shouldStop(Symbol sym, MethodResolutionPhase phase) {
return phase.ordinal() > maxPhase.ordinal() ||
- sym.kind < ERRONEOUS || sym.kind == AMBIGUOUS;
+ !sym.kind.isOverloadError() || sym.kind == AMBIGUOUS;
}
/**
@@ -3029,7 +3044,7 @@
@Override
Symbol access(Env<AttrContext> env, DiagnosticPosition pos, Symbol location, Symbol sym) {
- if (sym.kind >= AMBIGUOUS) {
+ if (sym.kind.isOverloadError()) {
//if nothing is found return the 'first' error
sym = accessMethod(sym, pos, location, site, name, true, argtypes, typeargtypes);
}
@@ -3228,7 +3243,7 @@
return sym.kind != MTH ||
site.getEnclosingType().hasTag(NONE) ||
hasEnclosingInstance(env, site) ?
- sym : new InvalidSymbolError(Kinds.MISSING_ENCL, sym, null) {
+ sym : new InvalidSymbolError(MISSING_ENCL, sym, null) {
@Override
JCDiagnostic getDiagnostic(DiagnosticType dkind, DiagnosticPosition pos, Symbol location, Type site, Name name, List<Type> argtypes, List<Type> typeargtypes) {
return diags.create(dkind, log.currentSource(), pos,
@@ -3369,7 +3384,7 @@
boolean hasEnclosingInstance(Env<AttrContext> env, Type type) {
Symbol encl = resolveSelfContainingInternal(env, type.tsym, false);
- return encl != null && encl.kind < ERRONEOUS;
+ return encl != null && !encl.kind.isOverloadError();
}
private Symbol resolveSelfContainingInternal(Env<AttrContext> env,
@@ -3405,7 +3420,7 @@
}
Type resolveImplicitThis(DiagnosticPosition pos, Env<AttrContext> env, Type t, boolean isSuperCall) {
- Type thisType = (((t.tsym.owner.kind & (MTH|VAR)) != 0)
+ 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)
@@ -3466,7 +3481,7 @@
/** The name of the kind of error, for debugging only. */
final String debugName;
- ResolveError(int kind, String debugName) {
+ ResolveError(Kind kind, String debugName) {
super(kind, 0, null, null, null);
this.debugName = debugName;
}
@@ -3534,7 +3549,7 @@
/** The invalid symbol found during resolution */
Symbol sym;
- InvalidSymbolError(int kind, Symbol sym, String debugName) {
+ InvalidSymbolError(Kind kind, Symbol sym, String debugName) {
super(kind, debugName);
this.sym = sym;
}
@@ -3551,7 +3566,7 @@
@Override
public Symbol access(Name name, TypeSymbol location) {
- if ((sym.kind & ERRONEOUS) == 0 && (sym.kind & TYP) != 0)
+ if (!sym.kind.isOverloadError() && sym.kind.matches(KindSelector.TYP))
return types.createErrorType(name, location, sym.type).tsym;
else
return sym;
@@ -3564,11 +3579,11 @@
*/
class SymbolNotFoundError extends ResolveError {
- SymbolNotFoundError(int kind) {
+ SymbolNotFoundError(Kind kind) {
this(kind, "symbol not found error");
}
- SymbolNotFoundError(int kind, String debugName) {
+ SymbolNotFoundError(Kind kind, String debugName) {
super(kind, debugName);
}
@@ -3609,7 +3624,7 @@
}
boolean isConstructor = (kind == ABSENT_MTH || kind == WRONG_STATICNESS) &&
name == names.init;
- KindName kindname = isConstructor ? KindName.CONSTRUCTOR : absentKind(kind);
+ KindName kindname = isConstructor ? KindName.CONSTRUCTOR : kind.absentKind();
Name idname = isConstructor ? site.tsym.name : name;
String errKey = getErrorKey(kindname, typeargtypes.nonEmpty(), hasLocation);
if (hasLocation) {
@@ -3669,7 +3684,7 @@
this(WRONG_MTH, "inapplicable symbol error", context);
}
- protected InapplicableSymbolError(int kind, String debugName, MethodResolutionContext context) {
+ protected InapplicableSymbolError(Kind kind, String debugName, MethodResolutionContext context) {
super(kind, debugName);
this.resolveContext = context;
}
@@ -3784,7 +3799,7 @@
log.currentSource(),
pos,
"cant.apply.symbols",
- name == names.init ? KindName.CONSTRUCTOR : absentKind(kind),
+ name == names.init ? KindName.CONSTRUCTOR : kind.absentKind(),
name == names.init ? site.tsym.name : name,
methodArguments(argtypes));
return new JCDiagnostic.MultilineDiagnostic(err, candidateDetails(filteredCandidates, site));
@@ -4164,8 +4179,8 @@
@Override
public Symbol mergeResults(Symbol bestSoFar, Symbol sym) {
//Check invariants (see {@code LookupHelper.shouldStop})
- Assert.check(bestSoFar.kind >= ERRONEOUS && bestSoFar.kind != AMBIGUOUS);
- if (sym.kind < ERRONEOUS) {
+ Assert.check(bestSoFar.kind.isOverloadError() && bestSoFar.kind != AMBIGUOUS);
+ if (!sym.kind.isOverloadError()) {
//varargs resolution successful
return sym;
} else {
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Thu Oct 23 13:43:56 2014 -0700
@@ -36,7 +36,7 @@
import com.sun.tools.javac.util.List;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.code.TypeTag.TYPEVAR;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Oct 23 13:43:56 2014 -0700
@@ -51,7 +51,7 @@
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+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.TYPEVAR;
import static com.sun.tools.javac.jvm.ClassFile.*;
@@ -994,7 +994,7 @@
// but the class name does not match the file name, then it is
// an auxiliary class.
String sn = n.toString();
- if (c.owner.kind == Kinds.PCK &&
+ if (c.owner.kind == PCK &&
sn.endsWith(".java") &&
!sn.equals(c.name.toString()+".java")) {
c.flags_field |= AUXILIARY;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Thu Oct 23 13:43:56 2014 -0700
@@ -48,7 +48,7 @@
import com.sun.tools.javac.util.*;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.main.Option.*;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java Thu Oct 23 13:43:56 2014 -0700
@@ -2017,13 +2017,12 @@
List<VarSymbol> locals = lvtRanges.getVars(meth, tree);
for (LocalVar localVar: lvar) {
for (VarSymbol aliveLocal : locals) {
- if (localVar == null) {
- return;
- }
- if (localVar.sym == aliveLocal && localVar.lastRange() != null) {
- char length = (char)(closingCP - localVar.lastRange().start_pc);
- if (length < Character.MAX_VALUE) {
- localVar.closeRange(length);
+ if (localVar != null) {
+ if (localVar.sym == aliveLocal && localVar.lastRange() != null) {
+ char length = (char)(closingCP - localVar.lastRange().start_pc);
+ if (length < Character.MAX_VALUE) {
+ localVar.closeRange(length);
+ }
}
}
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Thu Oct 23 13:43:56 2014 -0700
@@ -44,7 +44,7 @@
import com.sun.tools.javac.tree.JCTree.*;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.jvm.ByteCodes.*;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java Thu Oct 23 13:43:56 2014 -0700
@@ -51,7 +51,7 @@
import com.sun.tools.javac.util.Pair;
import static com.sun.tools.javac.main.Option.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
/** This class provides operations to write native header files for classes.
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java Thu Oct 23 13:43:56 2014 -0700
@@ -25,7 +25,6 @@
package com.sun.tools.javac.jvm;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.TypeTag;
@@ -43,6 +42,9 @@
import com.sun.tools.javac.util.DefinedBy;
import com.sun.tools.javac.util.DefinedBy.Api;
+import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
/** An internal structure that corresponds to the constant pool of a classfile.
*
* <p><b>This is NOT part of any supported API.
@@ -289,7 +291,7 @@
@SuppressWarnings("fallthrough")
private void checkConsistent() {
boolean staticOk = false;
- int expectedKind = -1;
+ Kind expectedKind = null;
Filter<Name> nameFilter = nonInitFilter;
boolean interfaceOwner = false;
switch (refKind) {
@@ -298,25 +300,25 @@
staticOk = true;
case ClassFile.REF_getField:
case ClassFile.REF_putField:
- expectedKind = Kinds.VAR;
+ expectedKind = VAR;
break;
case ClassFile.REF_newInvokeSpecial:
nameFilter = initFilter;
- expectedKind = Kinds.MTH;
+ expectedKind = MTH;
break;
case ClassFile.REF_invokeInterface:
interfaceOwner = true;
- expectedKind = Kinds.MTH;
+ expectedKind = MTH;
break;
case ClassFile.REF_invokeStatic:
interfaceOwner = true;
staticOk = true;
case ClassFile.REF_invokeVirtual:
- expectedKind = Kinds.MTH;
+ expectedKind = MTH;
break;
case ClassFile.REF_invokeSpecial:
interfaceOwner = true;
- expectedKind = Kinds.MTH;
+ expectedKind = MTH;
break;
}
Assert.check(!refSym.isStatic() || staticOk);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Oct 23 13:43:56 2014 -0700
@@ -68,12 +68,11 @@
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.Log.WriterKind;
-import static javax.tools.StandardLocation.CLASS_OUTPUT;
-
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.main.Option.*;
import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*;
-
+import static javax.tools.StandardLocation.CLASS_OUTPUT;
/** This class could be the main entry point for GJC when GJC is used as a
* component in a larger software system. It provides operations to
@@ -1105,23 +1104,23 @@
for (String nameStr : classnames) {
Symbol sym = resolveBinaryNameOrIdent(nameStr);
if (sym == null ||
- (sym.kind == Kinds.PCK && !processPcks) ||
- sym.kind == Kinds.ABSENT_TYP) {
+ (sym.kind == PCK && !processPcks) ||
+ sym.kind == ABSENT_TYP) {
log.error("proc.cant.find.class", nameStr);
errors = true;
continue;
}
try {
- if (sym.kind == Kinds.PCK)
+ if (sym.kind == PCK)
sym.complete();
if (sym.exists()) {
- if (sym.kind == Kinds.PCK)
+ if (sym.kind == PCK)
pckSymbols = pckSymbols.prepend((PackageSymbol)sym);
else
classSymbols = classSymbols.prepend((ClassSymbol)sym);
continue;
}
- Assert.check(sym.kind == Kinds.PCK);
+ Assert.check(sym.kind == PCK);
log.warning("proc.package.does.not.exist", nameStr);
pckSymbols = pckSymbols.prepend((PackageSymbol)sym);
} catch (CompletionFailure e) {
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java Thu Oct 23 13:43:56 2014 -0700
@@ -44,6 +44,7 @@
import com.sun.tools.javac.util.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
/**
* A generator of dynamic proxy implementations of
@@ -121,7 +122,7 @@
// First find the default values.
ClassSymbol sym = (ClassSymbol) anno.type.tsym;
for (Symbol s : sym.members().getSymbols(NON_RECURSIVE)) {
- if (s.kind == Kinds.MTH) {
+ if (s.kind == MTH) {
MethodSymbol m = (MethodSymbol) s;
Attribute def = m.getDefaultValue();
if (def != null)
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/model/JavacElements.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/model/JavacElements.java Thu Oct 23 13:43:56 2014 -0700
@@ -49,6 +49,7 @@
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.DefinedBy.Api;
import com.sun.tools.javac.util.Name;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
@@ -120,7 +121,7 @@
sym.complete();
- return (sym.kind != Kinds.ERR &&
+ return (sym.kind != ERR &&
sym.exists() &&
clazz.isInstance(sym) &&
name.equals(sym.getQualifiedName()))
@@ -460,7 +461,7 @@
// Only static methods can hide other methods.
// Methods only hide methods with matching signatures.
- if (hider.kind == Kinds.MTH) {
+ if (hider.kind == MTH) {
if (!hider.isStatic() ||
!types.isSubSignature(hider.type, hidee.type)) {
return false;
@@ -592,7 +593,7 @@
private Env<AttrContext> getEnterEnv(Symbol sym) {
// Get enclosing class of sym, or sym itself if it is a class
// or package.
- TypeSymbol ts = (sym.kind != Kinds.PCK)
+ TypeSymbol ts = (sym.kind != PCK)
? sym.enclClass()
: (PackageSymbol) sym;
return (ts != null)
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/model/JavacTypes.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/model/JavacTypes.java Thu Oct 23 13:43:56 2014 -0700
@@ -39,6 +39,8 @@
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.DefinedBy.Api;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
/**
* Utility methods for operating on types.
*
@@ -328,7 +330,7 @@
if (t != origin.type) {
ClassSymbol c = (ClassSymbol) t.tsym;
for (Symbol sym : c.members().getSymbolsByName(m.name)) {
- if (sym.kind == Kinds.MTH && m.overrides(sym, origin, types, true)) {
+ if (sym.kind == MTH && m.overrides(sym, origin, types, true)) {
results.add((MethodSymbol) sym);
}
}
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Thu Oct 23 13:43:56 2014 -0700
@@ -75,6 +75,7 @@
import com.sun.tools.javac.util.Options;
import com.sun.tools.javac.util.ServiceLoader;
import static com.sun.tools.javac.code.Lint.LintCategory.PROCESSING;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.main.Option.*;
import static com.sun.tools.javac.comp.CompileStates.CompileState;
import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*;
@@ -1079,7 +1080,7 @@
boolean foundError = false;
for (ClassSymbol cs : symtab.classes.values()) {
- if (cs.kind == Kinds.ERR) {
+ if (cs.kind == ERR) {
foundError = true;
break;
}
@@ -1087,7 +1088,7 @@
if (foundError) {
for (ClassSymbol cs : symtab.classes.values()) {
- if (cs.classfile != null || cs.kind == Kinds.ERR) {
+ if (cs.classfile != null || cs.kind == ERR) {
cs.reset();
cs.type = new ClassType(cs.type.getEnclosingType(), null, cs);
if (cs.completer == null) {
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/sym/CreateSymbols.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/sym/CreateSymbols.java Thu Oct 23 13:43:56 2014 -0700
@@ -26,7 +26,6 @@
package com.sun.tools.javac.sym;
import com.sun.tools.javac.api.JavacTaskImpl;
-import com.sun.tools.javac.code.Kinds;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Symbol;
@@ -69,6 +68,8 @@
import javax.tools.StandardLocation;
import javax.tools.ToolProvider;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
/**
* Used to generate a "symbol file" representing rt.jar that only
* includes supported or legacy proprietary API. Valid annotation
@@ -221,7 +222,7 @@
continue;
}
TypeSymbol sym = (TypeSymbol)compiler.resolveIdent(className);
- if (sym.kind != Kinds.TYP) {
+ if (sym.kind != TYP) {
if (className.indexOf('$') < 0) {
System.err.println("Ignoring (other) " + className + " : " + sym);
System.err.println(" " + sym.getClass().getSimpleName() + " " + sym.type);
@@ -263,7 +264,7 @@
cs.pool = pool;
writer.writeClass(cs);
for (Symbol sym : cs.members().getSymbols(NON_RECURSIVE)) {
- if (sym.kind == Kinds.TYP) {
+ if (sym.kind == TYP) {
ClassSymbol nestedClass = (ClassSymbol)sym;
nestedClass.complete();
writeClass(pool, nestedClass, writer);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java Thu Oct 23 13:43:56 2014 -0700
@@ -37,6 +37,7 @@
import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
import static com.sun.tools.javac.code.Flags.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.BOT;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
import static com.sun.tools.javac.tree.JCTree.Tag.BLOCK;
@@ -339,8 +340,7 @@
//where
private static boolean isStaticSym(JCTree tree) {
Symbol sym = symbol(tree);
- return (sym.kind == Kinds.TYP ||
- sym.kind == Kinds.PCK);
+ return (sym.kind == TYP || sym.kind == PCK);
}
/** Return true if a tree represents the null literal. */
@@ -876,7 +876,7 @@
if (!tree.hasTag(SELECT)) return false;
JCFieldAccess s = (JCFieldAccess) tree;
Symbol e = symbol(s.selected);
- return e == null || (e.kind != Kinds.PCK && e.kind != Kinds.TYP);
+ return e == null || (e.kind != PCK && e.kind != TYP);
}
/** If this tree is an identifier or a field, set its symbol, otherwise skip.
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java Thu Oct 23 13:43:56 2014 -0700
@@ -36,7 +36,7 @@
import com.sun.tools.javac.tree.JCTree.*;
import static com.sun.tools.javac.code.Flags.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.*;
/** Factory class for trees.
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Thu Oct 23 13:43:56 2014 -0700
@@ -31,7 +31,6 @@
import java.util.Locale;
import java.util.Map;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Printer;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.*;
@@ -42,6 +41,8 @@
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.code.Flags.*;
+import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.util.LayoutCharacters.*;
import static com.sun.tools.javac.util.RichDiagnosticFormatter.RichConfiguration.*;
@@ -305,7 +306,7 @@
Symbol s2 = s;
while (s2.type.hasTag(CLASS) &&
s2.type.getEnclosingType().hasTag(CLASS) &&
- s2.owner.kind == Kinds.TYP) {
+ s2.owner.kind == TYP) {
l = l.prepend(s2.getSimpleName());
s2 = s2.owner;
}
@@ -562,7 +563,7 @@
//this is a true typevar
JCDiagnostic d = diags.fragment("where.typevar" +
(boundErroneous ? ".1" : ""), t, bounds,
- Kinds.kindName(t.tsym.location()), t.tsym.location());
+ kindName(t.tsym.location()), t.tsym.location());
whereClauses.get(WhereClauseKind.TYPEVAR).put(t, d);
symbolPreprocessor.visit(t.tsym.location(), null);
visit(bounds);
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/dependencies/TypeAndSupertypesDependency.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/dependencies/TypeAndSupertypesDependency.java Thu Oct 23 13:43:56 2014 -0700
@@ -36,6 +36,7 @@
import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Type;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
public class TypeAndSupertypesDependency implements Dependency {
@@ -61,7 +62,7 @@
@Override
public Set<PackageSymbol> getPackages() {
- if (type.kind == Kinds.ERR)
+ if (type.kind == ERR)
return Collections.emptySet();
if (type instanceof ClassSymbol) {
return allSupertypes(type).stream()
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/AnnotationTypeDocImpl.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/AnnotationTypeDocImpl.java Thu Oct 23 13:43:56 2014 -0700
@@ -28,13 +28,14 @@
import com.sun.javadoc.*;
import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.util.List;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
/**
* Represents an annotation type.
*
@@ -94,7 +95,7 @@
public AnnotationTypeElementDoc[] elements() {
List<AnnotationTypeElementDoc> elements = List.nil();
for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
- if (sym != null && sym.kind == Kinds.MTH) {
+ if (sym != null && sym.kind == MTH) {
MethodSymbol s = (MethodSymbol)sym;
elements = elements.prepend(env.getAnnotationTypeElementDoc(s));
}
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Thu Oct 23 13:43:56 2014 -0700
@@ -41,6 +41,7 @@
import com.sun.source.util.TreePath;
import com.sun.tools.javac.code.Flags;
import com.sun.tools.javac.code.Kinds;
+import com.sun.tools.javac.code.Kinds.KindSelector;
import com.sun.tools.javac.code.Scope;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.*;
@@ -58,7 +59,7 @@
import com.sun.tools.javac.util.Name;
import com.sun.tools.javac.util.Names;
import com.sun.tools.javac.util.Position;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
@@ -617,7 +618,7 @@
List<MethodDocImpl> methods = List.nil();
for (Symbol sym :tsym.members().getSymbols(NON_RECURSIVE)) {
if (sym != null
- && sym.kind == Kinds.MTH
+ && sym.kind == MTH
&& sym.name != names.init
&& sym.name != names.clinit) {
MethodSymbol s = (MethodSymbol)sym;
@@ -652,7 +653,7 @@
List<ConstructorDocImpl> constructors = List.nil();
for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
if (sym != null &&
- sym.kind == Kinds.MTH && sym.name == names.init) {
+ sym.kind == MTH && sym.name == names.init) {
MethodSymbol s = (MethodSymbol)sym;
if (!filter || env.shouldDocument(s)) {
constructors = constructors.prepend(env.getConstructorDoc(s));
@@ -687,7 +688,7 @@
l.append(this);
List<ClassDocImpl> more = List.nil();
for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
- if (sym != null && sym.kind == Kinds.TYP) {
+ if (sym != null && sym.kind == TYP) {
ClassSymbol s = (ClassSymbol)sym;
ClassDocImpl c = env.getClassDoc(s);
if (c.isSynthetic()) continue;
@@ -714,7 +715,7 @@
public ClassDoc[] innerClasses(boolean filter) {
ListBuffer<ClassDocImpl> innerClasses = new ListBuffer<>();
for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
- if (sym != null && sym.kind == Kinds.TYP) {
+ if (sym != null && sym.kind == TYP) {
ClassSymbol s = (ClassSymbol)sym;
if ((s.flags_field & Flags.SYNTHETIC) != 0) continue;
if (!filter || env.isVisible(s)) {
@@ -810,7 +811,7 @@
Scope s = compenv.toplevel.namedImportScope;
for (Symbol sym : s.getSymbolsByName(names.fromString(className))) {
- if (sym.kind == Kinds.TYP) {
+ if (sym.kind == TYP) {
ClassDoc c = env.getClassDoc((ClassSymbol)sym);
return c;
}
@@ -818,7 +819,7 @@
s = compenv.toplevel.starImportScope;
for (Symbol sym : s.getSymbolsByName(names.fromString(className))) {
- if (sym.kind == Kinds.TYP) {
+ if (sym.kind == TYP) {
ClassDoc c = env.getClassDoc((ClassSymbol)sym);
return c;
}
@@ -931,7 +932,7 @@
// attempt to emulate the old behavior.
MethodSymbol lastFound = null;
for (Symbol sym : tsym.members().getSymbolsByName(names.fromString(methodName))) {
- if (sym.kind == Kinds.MTH) {
+ if (sym.kind == MTH) {
//### Should intern methodName as Name.
if (sym.name.toString().equals(methodName)) {
lastFound = (MethodSymbol)sym;
@@ -944,7 +945,7 @@
} else {
for (Symbol sym : tsym.members().getSymbolsByName(names.fromString(methodName))) {
if (sym != null &&
- sym.kind == Kinds.MTH) {
+ sym.kind == MTH) {
//### Should intern methodName as Name.
if (hasParameterTypes((MethodSymbol)sym, paramTypes)) {
return env.getMethodDoc((MethodSymbol)sym);
@@ -1005,7 +1006,7 @@
String[] paramTypes) {
Names names = tsym.name.table.names;
for (Symbol sym : tsym.members().getSymbolsByName(names.fromString("<init>"))) {
- if (sym.kind == Kinds.MTH) {
+ if (sym.kind == MTH) {
if (hasParameterTypes((MethodSymbol)sym, paramTypes)) {
return env.getConstructorDoc((MethodSymbol)sym);
}
@@ -1047,7 +1048,7 @@
searched.add(this);
for (Symbol sym : tsym.members().getSymbolsByName(names.fromString(fieldName))) {
- if (sym.kind == Kinds.VAR) {
+ if (sym.kind == VAR) {
//### Should intern fieldName as Name.
return env.getFieldDoc((VarSymbol)sym);
}
@@ -1111,7 +1112,7 @@
if (t.hasTag(IMPORT)) {
JCTree imp = ((JCImport) t).qualid;
if ((TreeInfo.name(imp) != asterisk) &&
- (imp.type.tsym.kind & Kinds.TYP) != 0) {
+ imp.type.tsym.kind.matches(KindSelector.TYP)) {
importedClasses.append(
env.getClassDoc((ClassSymbol)imp.type.tsym));
}
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/JavadocEnter.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/JavadocEnter.java Thu Oct 23 13:43:56 2014 -0700
@@ -28,7 +28,6 @@
import javax.tools.JavaFileObject;
import com.sun.source.util.TreePath;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.comp.Enter;
import com.sun.tools.javac.tree.JCTree.*;
@@ -36,6 +35,8 @@
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
import com.sun.tools.javac.util.List;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
/**
* Javadoc's own enter phase does a few things above and beyond that
* done by javac.
@@ -95,7 +96,7 @@
public void visitClassDef(JCClassDecl tree) {
super.visitClassDef(tree);
if (tree.sym == null) return;
- if (tree.sym.kind == Kinds.TYP || tree.sym.kind == Kinds.ERR) {
+ if (tree.sym.kind == TYP || tree.sym.kind == ERR) {
ClassSymbol c = tree.sym;
docenv.makeClassDoc(c, docenv.getTreePath(env.toplevel, tree));
}
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Thu Oct 23 13:43:56 2014 -0700
@@ -27,7 +27,6 @@
import com.sun.source.util.TreePath;
import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.comp.MemberEnter;
import com.sun.tools.javac.tree.JCTree;
@@ -35,6 +34,7 @@
import com.sun.tools.javac.util.Context;
import static com.sun.tools.javac.code.Flags.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
/**
* Javadoc's own memberEnter phase does a few things above and beyond that
@@ -74,7 +74,7 @@
public void visitMethodDef(JCMethodDecl tree) {
super.visitMethodDef(tree);
MethodSymbol meth = tree.sym;
- if (meth == null || meth.kind != Kinds.MTH) return;
+ if (meth == null || meth.kind != MTH) return;
TreePath treePath = docenv.getTreePath(env.toplevel, env.enclClass, tree);
if (meth.isConstructor())
docenv.makeConstructorDoc(meth, treePath);
@@ -102,7 +102,7 @@
}
super.visitVarDef(tree);
if (tree.sym != null &&
- tree.sym.kind == Kinds.VAR &&
+ tree.sym.kind == VAR &&
!isParameter(tree.sym)) {
docenv.makeFieldDoc(tree.sym, docenv.getTreePath(env.toplevel, env.enclClass, tree));
}
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/SeeTagImpl.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/SeeTagImpl.java Thu Oct 23 13:43:56 2014 -0700
@@ -29,12 +29,13 @@
import java.util.Locale;
import com.sun.javadoc.*;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Printer;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Type.CapturedType;
import com.sun.tools.javac.util.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
/**
* Represents a see also documentation tag.
* The @see tag can be plain text, or reference a class or member.
@@ -132,7 +133,7 @@
sb.append("+++ ").append(file).append(": ")
.append(name()).append(" ").append(seetext).append(": ");
sb.append(sym.getKind()).append(" ");
- if (sym.kind == Kinds.MTH || sym.kind == Kinds.VAR)
+ if (sym.kind == MTH || sym.kind == VAR)
sb.append(printer.visit(sym.owner, locale)).append(".");
sb.append(printer.visit(sym, locale));
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/SerializedForm.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/SerializedForm.java Thu Oct 23 13:43:56 2014 -0700
@@ -32,6 +32,7 @@
import com.sun.tools.javac.code.Symbol.VarSymbol;
import com.sun.tools.javac.util.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
/**
@@ -158,7 +159,7 @@
* so must lookup by ClassSymbol, not by ClassDocImpl.
*/
for (Symbol sym : def.members().getSymbolsByName(names.fromString(SERIALIZABLE_FIELDS))) {
- if (sym.kind == Kinds.VAR) {
+ if (sym.kind == VAR) {
VarSymbol f = (VarSymbol)sym;
if ((f.flags() & Flags.STATIC) != 0 &&
(f.flags() & Flags.PRIVATE) != 0) {
@@ -179,7 +180,7 @@
ClassSymbol def,
ClassDocImpl cd) {
for (Symbol sym : def.members().getSymbols(NON_RECURSIVE)) {
- if (sym != null && sym.kind == Kinds.VAR) {
+ if (sym != null && sym.kind == VAR) {
VarSymbol f = (VarSymbol)sym;
if ((f.flags() & Flags.STATIC) == 0 &&
(f.flags() & Flags.TRANSIENT) == 0) {
@@ -208,7 +209,7 @@
Names names = def.name.table.names;
for (Symbol sym : def.members().getSymbolsByName(names.fromString(methodName))) {
- if (sym.kind == Kinds.MTH) {
+ if (sym.kind == MTH) {
MethodSymbol md = (MethodSymbol)sym;
if ((md.flags() & Flags.STATIC) == 0) {
/*
@@ -240,7 +241,7 @@
// Look for a FieldDocImpl that is documented by serialFieldTagImpl.
for (Symbol sym : def.members().getSymbolsByName(fieldName)) {
- if (sym.kind == Kinds.VAR) {
+ if (sym.kind == VAR) {
VarSymbol f = (VarSymbol) sym;
FieldDocImpl fdi = env.getFieldDoc(f);
((SerialFieldTagImpl) (tag)).mapToFieldDocImpl(fdi);
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/TypeVariableImpl.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/TypeVariableImpl.java Thu Oct 23 13:43:56 2014 -0700
@@ -30,6 +30,7 @@
import com.sun.tools.javac.code.Attribute;
import com.sun.tools.javac.code.Attribute.TypeCompound;
import com.sun.tools.javac.code.Kinds;
+import com.sun.tools.javac.code.Kinds.KindSelector;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.code.Symbol.MethodSymbol;
@@ -70,7 +71,7 @@
*/
public ProgramElementDoc owner() {
Symbol osym = type.tsym.owner;
- if ((osym.kind & Kinds.TYP) != 0) {
+ if (osym.kind.matches(KindSelector.TYP)) {
return env.getClassDoc((ClassSymbol)osym);
}
Names names = osym.name.table.names;
--- a/langtools/test/tools/javac/6889255/T6889255.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/test/tools/javac/6889255/T6889255.java Thu Oct 23 13:43:56 2014 -0700
@@ -31,7 +31,6 @@
import java.util.*;
import javax.tools.StandardLocation;
import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Kinds;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Symtab;
@@ -385,7 +384,7 @@
for (Symbol s : sym.members_field.getSymbols(NON_RECURSIVE)) {
System.err.println("Checking member " + s);
switch (s.kind) {
- case Kinds.TYP: {
+ case TYP: {
String name = s.flatName().toString();
if (!classes.contains(name)) {
classes.add(name);
@@ -393,7 +392,7 @@
}
break;
}
- case Kinds.MTH:
+ case MTH:
verify((MethodSymbol) s, expectNames);
break;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/T8057800/NPEMethodReferenceAndGenericsTest.java Thu Oct 23 13:43:56 2014 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2014, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 8057800
+ * @summary Method reference with generic type creates NPE when compiling
+ * @compile NPEMethodReferenceAndGenericsTest.java
+ */
+
+public class NPEMethodReferenceAndGenericsTest {
+ public <T> void foo(java.util.Comparator<? super T> comparator) {}
+
+ public <C extends Comparable<? super C>> void foo() {
+ foo(C::compareTo);
+ }
+}
--- a/langtools/test/tools/javac/scope/HashCollisionTest.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/test/tools/javac/scope/HashCollisionTest.java Thu Oct 23 13:43:56 2014 -0700
@@ -41,6 +41,8 @@
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.file.JavacFileManager;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
+
public class HashCollisionTest {
public static void main(String... args) throws Exception {
new HashCollisionTest().run();
@@ -116,7 +118,7 @@
ImportFilter typeFilter = new ImportFilter() {
@Override
public boolean accepts(Scope origin, Symbol sym) {
- return sym.kind == Kinds.TYP;
+ return sym.kind == TYP;
}
};
starImportScope.importAll(fromScope, fromScope, typeFilter, false);
--- a/langtools/test/tools/javac/scope/StarImportTest.java Thu Oct 23 11:19:28 2014 -0700
+++ b/langtools/test/tools/javac/scope/StarImportTest.java Thu Oct 23 13:43:56 2014 -0700
@@ -38,7 +38,7 @@
import com.sun.tools.javac.file.JavacFileManager;
import com.sun.tools.javac.util.*;
-import static com.sun.tools.javac.code.Kinds.*;
+import static com.sun.tools.javac.code.Kinds.Kind.*;
public class StarImportTest {
public static void main(String... args) throws Exception {