- * deregisterDriver |
+ * deregisterDriver |
* Allows the invocation of the {@code DriverManager}
* method {@code deregisterDriver} |
* Permits an application to remove a JDBC driver from the list of
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/java.sql/share/classes/java/sql/Statement.java
--- a/jdk/src/java.sql/share/classes/java/sql/Statement.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql/share/classes/java/sql/Statement.java Thu Jul 20 09:38:13 2017 -0700
@@ -1379,17 +1379,17 @@
* single quote within the string will be replaced by two single quotes.
*
*
- *
+ *
* Examples of the conversion:
*
- * Value | Result |
+ * Value | Result |
*
*
- * Hello | 'Hello' |
- * G'Day | 'G''Day' |
- * 'G''Day' |
+ * Hello | 'Hello' |
+ * G'Day | 'G''Day' |
+ * 'G''Day' |
* '''G''''Day''' |
- * I'''M | 'I''''''M' |
+ * I'''M | 'I''''''M' |
*
*
*
@@ -1454,48 +1454,48 @@
* Examples of the conversion:
*
*
- * identifier |
- * alwaysQuote |
- * Result |
+ * identifier |
+ * alwaysQuote |
+ * Result |
*
*
*
- * Hello |
+ * Hello |
* false |
* Hello |
*
*
- * Hello |
+ * Hello |
* true |
* "Hello" |
*
*
- * G'Day |
+ * G'Day |
* false |
* "G'Day" |
*
*
- * "Bruce Wayne" |
+ * "Bruce Wayne" |
* false |
* "Bruce Wayne" |
*
*
- * "Bruce Wayne" |
+ * "Bruce Wayne" |
* true |
* "Bruce Wayne" |
*
*
- * GoodDay$ |
+ * GoodDay$ |
* false |
* "GoodDay$" |
*
*
- * Hello"World |
+ * Hello"World |
* false |
* SQLException |
*
*
- * "Hello"World" |
+ * "Hello"World" |
* false |
* SQLException |
*
@@ -1554,33 +1554,33 @@
* Examples of the conversion:
*
*
- * identifier |
- * Simple Identifier |
+ * identifier |
+ * Simple Identifier |
*
*
*
*
- * Hello |
+ * Hello |
* true |
*
*
- * G'Day |
+ * G'Day |
* false |
*
*
- * "Bruce Wayne" |
+ * "Bruce Wayne" |
* false |
*
*
- * GoodDay$ |
+ * GoodDay$ |
* false |
*
*
- * Hello"World |
+ * Hello"World |
* false |
*
*
- * "Hello"World" |
+ * "Hello"World" |
* false |
*
*
@@ -1613,17 +1613,17 @@
* Examples of the conversion:
*
*
- * Value |
- * Result |
+ * Value |
+ * Result |
*
*
*
- * Hello | N'Hello' |
- * G'Day | N'G''Day' |
- * 'G''Day' |
+ * Hello | N'Hello' |
+ * G'Day | N'G''Day' |
+ * 'G''Day' |
* N'''G''''Day''' |
- * I'''M | N'I''''''M' |
- * N'Hello' | N'N''Hello''' |
+ * I'''M | N'I''''''M' |
+ * N'Hello' | N'N''Hello''' |
*
*
*
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/java.sql/share/classes/javax/sql/package.html
--- a/jdk/src/java.sql/share/classes/javax/sql/package.html Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/java.sql/share/classes/javax/sql/package.html Thu Jul 20 09:38:13 2017 -0700
@@ -280,7 +280,6 @@
The RowSet interface may be implemented in any number of
ways, and anyone may write an implementation. Developers are encouraged
to use their imaginations in coming up with new ways to use rowsets.
-
Package Specification
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/jdk.crypto.ec/share/classes/sun/security/ec/ECKeyPairGenerator.java
--- a/jdk/src/jdk.crypto.ec/share/classes/sun/security/ec/ECKeyPairGenerator.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.crypto.ec/share/classes/sun/security/ec/ECKeyPairGenerator.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,14 @@
package sun.security.ec;
+import java.io.IOException;
import java.math.BigInteger;
import java.security.*;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec;
import java.security.spec.ECPoint;
+import java.security.spec.InvalidParameterSpecException;
import sun.security.ec.ECPrivateKeyImpl;
import sun.security.ec.ECPublicKeyImpl;
@@ -85,17 +87,19 @@
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
throws InvalidAlgorithmParameterException {
+ ECParameterSpec ecSpec = null;
+
if (params instanceof ECParameterSpec) {
- this.params = ECUtil.getECParameterSpec(null,
+ ecSpec = ECUtil.getECParameterSpec(null,
(ECParameterSpec)params);
- if (this.params == null) {
+ if (ecSpec == null) {
throw new InvalidAlgorithmParameterException(
"Unsupported curve: " + params);
}
} else if (params instanceof ECGenParameterSpec) {
String name = ((ECGenParameterSpec)params).getName();
- this.params = ECUtil.getECParameterSpec(null, name);
- if (this.params == null) {
+ ecSpec = ECUtil.getECParameterSpec(null, name);
+ if (ecSpec == null) {
throw new InvalidAlgorithmParameterException(
"Unknown curve name: " + name);
}
@@ -103,11 +107,36 @@
throw new InvalidAlgorithmParameterException(
"ECParameterSpec or ECGenParameterSpec required for EC");
}
+
+ // Not all known curves are supported by the native implementation
+ ensureCurveIsSupported(ecSpec);
+ this.params = ecSpec;
+
this.keySize =
((ECParameterSpec)this.params).getCurve().getField().getFieldSize();
this.random = random;
}
+ private static void ensureCurveIsSupported(ECParameterSpec ecSpec)
+ throws InvalidAlgorithmParameterException {
+
+ AlgorithmParameters ecParams = ECUtil.getECParameters(null);
+ byte[] encodedParams;
+ try {
+ ecParams.init(ecSpec);
+ encodedParams = ecParams.getEncoded();
+ } catch (InvalidParameterSpecException ex) {
+ throw new InvalidAlgorithmParameterException(
+ "Unsupported curve: " + ecSpec.toString());
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ if (!isCurveSupported(encodedParams)) {
+ throw new InvalidAlgorithmParameterException(
+ "Unsupported curve: " + ecParams.toString());
+ }
+ }
+
// generate the keypair. See JCA doc
@Override
public KeyPair generateKeyPair() {
@@ -159,6 +188,17 @@
this.keySize = keySize;
}
+ /**
+ * Checks whether the curve in the encoded parameters is supported by the
+ * native implementation.
+ *
+ * @param encodedParams encoded parameters in the same form accepted
+ * by generateECKeyPair
+ * @return true if and only if generateECKeyPair will succeed for
+ * the supplied parameters
+ */
+ private static native boolean isCurveSupported(byte[] encodedParams);
+
/*
* Generates the keypair and returns a 2-element array of encoding bytes.
* The first one is for the private key, the second for the public key.
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp
--- a/jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -90,6 +90,50 @@
/*
* Class: sun_security_ec_ECKeyPairGenerator
+ * Method: isCurveSupported
+ * Signature: ([B)Z
+ */
+JNIEXPORT jboolean
+JNICALL Java_sun_security_ec_ECKeyPairGenerator_isCurveSupported
+ (JNIEnv *env, jclass clazz, jbyteArray encodedParams)
+{
+ SECKEYECParams params_item;
+ ECParams *ecparams = NULL;
+ jboolean result = JNI_FALSE;
+
+ // The curve is supported if we can get parameters for it
+ params_item.len = env->GetArrayLength(encodedParams);
+ params_item.data =
+ (unsigned char *) env->GetByteArrayElements(encodedParams, 0);
+ if (params_item.data == NULL) {
+ goto cleanup;
+ }
+
+ // Fill a new ECParams using the supplied OID
+ if (EC_DecodeParams(¶ms_item, &ecparams, 0) != SECSuccess) {
+ /* bad curve OID */
+ goto cleanup;
+ }
+
+ // If we make it to here, then the curve is supported
+ result = JNI_TRUE;
+
+cleanup:
+ {
+ if (params_item.data) {
+ env->ReleaseByteArrayElements(encodedParams,
+ (jbyte *) params_item.data, JNI_ABORT);
+ }
+ if (ecparams) {
+ FreeECParams(ecparams, true);
+ }
+ }
+
+ return result;
+}
+
+/*
+ * Class: sun_security_ec_ECKeyPairGenerator
* Method: generateECKeyPair
* Signature: (I[B[B)[[B
*/
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java
--- a/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
import java.lang.management.RuntimeMXBean;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.UnsupportedOperationException;
import sun.management.VMManagement;
/**
@@ -132,19 +133,11 @@
}
// Get the process id of the current running Java process
- private static Integer getProcessId() {
+ private static Long getProcessId() {
try {
- // Get the current process id using a reflection hack
- RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
- Field jvm = runtime.getClass().getDeclaredField("jvm");
- jvm.setAccessible(true);
-
- VMManagement mgmt = (sun.management.VMManagement) jvm.get(runtime);
- Method pid_method = mgmt.getClass().getDeclaredMethod("getProcessId");
- pid_method.setAccessible(true);
- Integer pid = (Integer) pid_method.invoke(mgmt);
- return pid;
- } catch(Exception ex) {
+ // Get the current process id
+ return ProcessHandle.current().pid();
+ } catch(UnsupportedOperationException ex) {
return null;
}
}
@@ -206,7 +199,7 @@
packet.setBroadcastInterval(Integer.toString(pause));
// Set process id
- Integer pid = getProcessId();
+ Long pid = getProcessId();
if (pid != null) {
packet.setProcessId(pid.toString());
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -59,65 +59,70 @@
* {@link #setOption(SctpSocketOption,Object) setOption} method. An SCTP
* channel support the following options:
*
- * Socket options
+ *
+ * Socket options
+ *
*
- * Option Name |
- * Description |
+ * Option Name |
+ * Description |
*
+ *
+ *
*
- * {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
- * SCTP_DISABLE_FRAGMENTS} |
+ * {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
+ * SCTP_DISABLE_FRAGMENTS} |
* Enables or disables message fragmentation |
*
*
- * {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
- * SCTP_EXPLICIT_COMPLETE} |
+ * {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
+ * SCTP_EXPLICIT_COMPLETE} |
* Enables or disables explicit message completion |
*
*
- * {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
- * SCTP_FRAGMENT_INTERLEAVE} |
+ * {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
+ * SCTP_FRAGMENT_INTERLEAVE} |
* Controls how the presentation of messages occur for the message
* receiver |
*
*
- * {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
- * SCTP_INIT_MAXSTREAMS} |
+ * {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
+ * SCTP_INIT_MAXSTREAMS} |
* The maximum number of streams requested by the local endpoint during
* association initialization |
*
*
- * {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} |
+ * {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} |
* Enables or disable a Nagle-like algorithm |
*
*
- * {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
- * SCTP_PRIMARY_ADDR} |
+ * {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
+ * SCTP_PRIMARY_ADDR} |
* Requests that the local SCTP stack use the given peer address as the
* association primary |
*
*
- * {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
- * SCTP_SET_PEER_PRIMARY_ADDR} |
+ * {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
+ * SCTP_SET_PEER_PRIMARY_ADDR} |
* Requests that the peer mark the enclosed address as the association
* primary |
*
*
- * {@link SctpStandardSocketOptions#SO_SNDBUF
- * SO_SNDBUF} |
+ * {@link SctpStandardSocketOptions#SO_SNDBUF
+ * SO_SNDBUF} |
* The size of the socket send buffer |
*
*
- * {@link SctpStandardSocketOptions#SO_RCVBUF
- * SO_RCVBUF} |
+ * {@link SctpStandardSocketOptions#SO_RCVBUF
+ * SO_RCVBUF} |
* The size of the socket receive buffer |
*
*
- * {@link SctpStandardSocketOptions#SO_LINGER
- * SO_LINGER} |
+ * {@link SctpStandardSocketOptions#SO_LINGER
+ * SO_LINGER} |
* Linger on close if data is present (when configured in blocking mode
* only) |
*
+ *
*
*
* Additional (implementation specific) options may also be supported. The list
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -63,65 +63,70 @@
* {@link #setOption(SctpSocketOption,Object,Association) setOption} method. An
* {@code SctpMultiChannel} supports the following options:
*
- * Socket options
+ *
+ * Socket options
+ *
*
- * Option Name |
- * Description |
+ * Option Name |
+ * Description |
*
+ *
+ *
*
- * {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
- * SCTP_DISABLE_FRAGMENTS} |
+ * {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
+ * SCTP_DISABLE_FRAGMENTS} |
* Enables or disables message fragmentation |
*
*
- * {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
- * SCTP_EXPLICIT_COMPLETE} |
+ * {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
+ * SCTP_EXPLICIT_COMPLETE} |
* Enables or disables explicit message completion |
*
*
- * {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
- * SCTP_FRAGMENT_INTERLEAVE} |
+ * {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
+ * SCTP_FRAGMENT_INTERLEAVE} |
* Controls how the presentation of messages occur for the message
* receiver |
*
*
- * {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
- * SCTP_INIT_MAXSTREAMS} |
+ * {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
+ * SCTP_INIT_MAXSTREAMS} |
* The maximum number of streams requested by the local endpoint during
* association initialization |
*
*
- * {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} |
+ * {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} |
* Enables or disable a Nagle-like algorithm |
*
*
- * {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
- * SCTP_PRIMARY_ADDR} |
+ * {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
+ * SCTP_PRIMARY_ADDR} |
* Requests that the local SCTP stack use the given peer address as the
* association primary |
*
*
- * {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
- * SCTP_SET_PEER_PRIMARY_ADDR} |
+ * {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
+ * SCTP_SET_PEER_PRIMARY_ADDR} |
* Requests that the peer mark the enclosed address as the association
* primary |
*
*
- * {@link SctpStandardSocketOptions#SO_SNDBUF
- * SO_SNDBUF} |
+ * {@link SctpStandardSocketOptions#SO_SNDBUF
+ * SO_SNDBUF} |
* The size of the socket send buffer |
*
*
- * {@link SctpStandardSocketOptions#SO_RCVBUF
- * SO_RCVBUF} |
+ * {@link SctpStandardSocketOptions#SO_RCVBUF
+ * SO_RCVBUF} |
* The size of the socket receive buffer |
*
*
- * {@link SctpStandardSocketOptions#SO_LINGER
- * SO_LINGER} |
+ * {@link SctpStandardSocketOptions#SO_LINGER
+ * SO_LINGER} |
* Linger on close if data is present (when configured in blocking mode
* only) |
*
+ *
*
*
* Additional (implementation specific) options may also be supported. The list
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java Thu Jul 20 09:38:13 2017 -0700
@@ -47,17 +47,22 @@
* {@link #setOption(SctpSocketOption,Object) setOption} method. SCTP server socket
* channels support the following options:
*
- * Socket options
+ *
+ * Socket options
+ *
*
- * Option Name |
- * Description |
+ * Option Name |
+ * Description |
*
+ *
+ *
*
- * {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
- * SCTP_INIT_MAXSTREAMS} |
+ * {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
+ * SCTP_INIT_MAXSTREAMS} |
* The maximum number of streams requested by the local endpoint during
* association initialization |
*
+ *
*
*
* Additional (implementation specific) options may also be supported. The list
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/ProblemList.txt
--- a/jdk/test/ProblemList.txt Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/ProblemList.txt Thu Jul 20 09:38:13 2017 -0700
@@ -264,9 +264,6 @@
tools/jimage/JImageListTest.java 8170120 generic-all
tools/jimage/JImageVerifyTest.java 8170120 generic-all
-tools/schemagen/MultiReleaseJarTest.java 8174692 generic-all
-tools/wsgen/MultiReleaseJarTest.java 8174692 generic-all
-
############################################################################
# jdk_jdi
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/com/oracle/security/ucrypto/TestAES.java
--- a/jdk/test/com/oracle/security/ucrypto/TestAES.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/com/oracle/security/ucrypto/TestAES.java Thu Jul 20 09:38:13 2017 -0700
@@ -26,17 +26,22 @@
* @bug 7088989 8014374 8167512 8173708
* @summary Ensure the AES ciphers of OracleUcrypto provider works correctly
* @key randomness
+ * @library /test/lib
+ * @build jdk.test.lib.Platform
+ * jdk.test.lib.Utils
* @run main TestAES
- * @run main/othervm/java.security.policy==empty.policy TestAES
+ * @run main/othervm -Dpolicy=empty.policy TestAES
*/
-import java.io.*;
import java.security.*;
import java.security.spec.*;
import java.util.*;
import javax.crypto.*;
import javax.crypto.spec.*;
+import jdk.test.lib.Platform;
+import jdk.test.lib.Utils;
+
public class TestAES extends UcryptoTest {
private static final String[] PADDEDCIPHER_ALGOS = {
@@ -55,10 +60,29 @@
private static final SecretKey CIPHER_KEY =
new SecretKeySpec(new byte[16], "AES");
+ private static final boolean IS_BAD_SOLARIS = isBadSolaris();
+
public static void main(String[] args) throws Exception {
+ // It has to determine Solaris version before enabling security manager.
+ // Because that needs some permissions, like java.io.FilePermission.
+ String policy = System.getProperty("policy");
+ if (policy != null) {
+ enableSecurityManager(policy);
+ }
+
main(new TestAES(), null);
}
+ // Enables security manager and uses the specified policy file to override
+ // the default one.
+ private static void enableSecurityManager(String policy) {
+ String policyURL = "file://" + System.getProperty("test.src", ".") + "/"
+ + policy;
+ System.out.println("policyURL: " + policyURL);
+ Security.setProperty("policy.url.1", policyURL);
+ System.setSecurityManager(new SecurityManager());
+ }
+
public void doTest(Provider prov) throws Exception {
// Provider for testing Interoperability
Provider sunJCEProv = Security.getProvider("SunJCE");
@@ -136,11 +160,18 @@
boolean testPassed = true;
byte[] in = new byte[16];
(new SecureRandom()).nextBytes(in);
- int blockSize = 16;
- for (int j = 1; j < (in.length - 1); j++) {
- System.out.println("Input offset size: " + j);
- for (int i = 0; i < algos.length; i++) {
+ for (int i = 0; i < algos.length; i++) {
+ if (IS_BAD_SOLARIS
+ && algos[i].indexOf("CFB128") != -1
+ && p.getName().equals("OracleUcrypto")) {
+ System.out.println("Ignore cases on CFB128 due to a pre-S11.3 bug");
+ continue;
+ }
+
+ for (int j = 1; j < (in.length - 1); j++) {
+ System.out.println("Input offset size: " + j);
+
try {
// check ENC
Cipher c;
@@ -177,12 +208,6 @@
k += c.doFinal(eout, firstPartLen+1, eout.length - firstPartLen - 1, dout, k);
if (!checkArrays(in, in.length, dout, k)) testPassed = false;
} catch(Exception ex) {
- if (ex instanceof BadPaddingException &&
- algos[i].indexOf("CFB128") != -1 &&
- p.getName().equals("OracleUcrypto")) {
- System.out.println("Ignore due to a pre-S11.3 bug: " + ex);
- continue;
- }
System.out.println("Unexpected Exception: " + algos[i]);
ex.printStackTrace();
testPassed = false;
@@ -261,7 +286,6 @@
}
}
-
private static void testCipherGCM(SecretKey key,
Provider p) {
boolean testPassed = true;
@@ -349,4 +373,12 @@
}
return equal;
}
+
+ // The cases on CFB128 mode have to be skipped on pre-S11.3.
+ private static boolean isBadSolaris() {
+ return Platform.isSolaris()
+ && Platform.getOsVersionMajor() <= 5
+ && Platform.getOsVersionMinor() <= 11
+ && Utils.distro().compareTo("11.3") < 0;
+ }
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/java/nio/charset/Charset/IllegalCharsetName.java
--- a/jdk/test/java/nio/charset/Charset/IllegalCharsetName.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/java/nio/charset/Charset/IllegalCharsetName.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,15 +22,12 @@
*/
/* @test
- * @bug 6330020
+ * @bug 6330020 8184665
* @summary Ensure Charset.forName/isSupport throws the correct exception
* if the charset names passed in are illegal.
*/
-import java.io.*;
-import java.nio.*;
import java.nio.charset.*;
-import java.util.*;
public class IllegalCharsetName {
public static void main(String[] args) throws Exception {
@@ -59,5 +56,18 @@
} catch (IllegalCharsetNameException x) { //expected
}
}
+
+ // Standard charsets may bypass alias checking during startup, test that
+ // they're all well-behaved as a sanity test
+ checkAliases(StandardCharsets.ISO_8859_1);
+ checkAliases(StandardCharsets.US_ASCII);
+ checkAliases(StandardCharsets.UTF_8);
+ }
+
+ private static void checkAliases(Charset cs) {
+ for (String alias : cs.aliases()) {
+ Charset.forName(alias);
+ Charset.isSupported(alias);
+ }
}
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/java/util/regex/RegExTest.java
--- a/jdk/test/java/util/regex/RegExTest.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/java/util/regex/RegExTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -33,9 +33,8 @@
* 6350801 6676425 6878475 6919132 6931676 6948903 6990617 7014645 7039066
* 7067045 7014640 7189363 8007395 8013252 8013254 8012646 8023647 6559590
* 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
- * 8151481 4867170 7080302 6728861 6995635 6736245 4916384
- * 6328855 6192895 6345469 6988218 6693451 7006761 8140212 8143282 8158482
- * 8176029
+ * 8151481 4867170 7080302 6728861 6995635 6736245 4916384 6328855 6192895
+ * 6345469 6988218 6693451 7006761 8140212 8143282 8158482 8176029 8184706
*
* @library /test/lib
* @build jdk.test.lib.RandomFactory
@@ -470,7 +469,25 @@
m.find();
if (!m.hitEnd())
failCount++;
- report("hitEnd from a Slice");
+
+ // 8184706: Matching u+0d at EOL against \R should hit-end
+ p = Pattern.compile("...\\R");
+ m = p.matcher("cat" + (char)0x0a);
+ m.find();
+ if (m.hitEnd())
+ failCount++;
+
+ m = p.matcher("cat" + (char)0x0d);
+ m.find();
+ if (!m.hitEnd())
+ failCount++;
+
+ m = p.matcher("cat" + (char)0x0d + (char)0x0a);
+ m.find();
+ if (m.hitEnd())
+ failCount++;
+
+ report("hitEnd");
}
// This is for bug 4997476
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/sun/management/jdp/JdpOnTestCase.java
--- a/jdk/test/sun/management/jdp/JdpOnTestCase.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/sun/management/jdp/JdpOnTestCase.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,7 @@
import java.net.SocketTimeoutException;
import java.util.Map;
+import static jdk.testlibrary.Asserts.assertNotEquals;
public class JdpOnTestCase extends JdpTestCase {
@@ -58,6 +59,7 @@
final String jdpName = payload.get("INSTANCE_NAME");
log.fine("Received correct JDP packet #" + String.valueOf(receivedJDPpackets) +
", jdp.name=" + jdpName);
+ assertNotEquals(null, payload.get("PROCESS_ID"), "Expected payload.get(\"PROCESS_ID\") to be not null.");
}
/**
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/sun/security/ec/InvalidCurve.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/ec/InvalidCurve.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8182999
+ * @summary Ensure that SunEC behaves correctly for unsupported curves.
+ * @run main InvalidCurve
+ */
+
+import java.security.*;
+import java.security.spec.*;
+import java.math.*;
+
+public class InvalidCurve {
+
+ public static void main(String[] args) {
+
+ KeyPairGenerator keyGen;
+ try {
+ keyGen = KeyPairGenerator.getInstance("EC", "SunEC");
+ ECGenParameterSpec brainpoolSpec =
+ new ECGenParameterSpec("brainpoolP256r1");
+ keyGen.initialize(brainpoolSpec);
+ } catch (InvalidAlgorithmParameterException ex) {
+ System.out.println(ex.getMessage());
+ // this is expected
+ return;
+ } catch (NoSuchAlgorithmException | NoSuchProviderException ex) {
+ throw new RuntimeException(ex);
+ }
+
+ keyGen.generateKeyPair();
+
+ // If we make it to here, then the test is not working correctly.
+ throw new RuntimeException("The expected exception was not thrown.");
+
+ }
+
+}
+
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/tools/schemagen/MultiReleaseJarTest.java
--- a/jdk/test/tools/schemagen/MultiReleaseJarTest.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/tools/schemagen/MultiReleaseJarTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -56,7 +56,7 @@
@DataProvider(name = "jarFiles")
public Object[][] jarFiles() {
- return new Object[][]{{"MV_BOTH.jar", 9},
+ return new Object[][]{{"MV_BOTH.jar", Math.min(10, Runtime.version().major())},
{"MV_ONLY_9.jar", 9},
{"NON_MV.jar", 8}};
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 jdk/test/tools/wsgen/MultiReleaseJarTest.java
--- a/jdk/test/tools/wsgen/MultiReleaseJarTest.java Mon Jul 17 09:13:49 2017 -0700
+++ b/jdk/test/tools/wsgen/MultiReleaseJarTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -56,7 +56,7 @@
@DataProvider(name = "jarFiles")
public Object[][] jarFiles() {
- return new Object[][]{{"MV_BOTH.jar", 9},
+ return new Object[][]{{"MV_BOTH.jar", Math.min(10, Runtime.version().major())},
{"MV_ONLY_9.jar", 9},
{"NON_MV.jar", 8}};
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/.hgtags
--- a/langtools/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -435,3 +435,4 @@
add6717b655efa3aa9350e917175f3965cfc0729 jdk-10+14
0d0ac75b0f6cbe218362e3fac4bb443496e7258f jdk-9+176
2f01728210c1405ef459e69d9c7247b5df6abb78 jdk-9+177
+2b9273266ea629ca686239c416a7ff8a592d822a jdk-10+15
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/make/gendata/Gendata-jdk.compiler.gmk
--- a/langtools/make/gendata/Gendata-jdk.compiler.gmk Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/make/gendata/Gendata-jdk.compiler.gmk Thu Jul 20 09:38:13 2017 -0700
@@ -60,7 +60,8 @@
$(SUPPORT_OUTPUTDIR)/symbols/ct.sym-files/_the.symbols: \
$(COMPILE_CREATE_SYMBOLS) \
- $(wildcard $(LANGTOOLS_TOPDIR)/make/data/symbols/*)
+ $(wildcard $(LANGTOOLS_TOPDIR)/make/data/symbols/*) \
+ $(MODULE_INFOS)
$(RM) -r $(@D)
$(MKDIR) -p $(@D)
$(ECHO) Creating ct.sym classes
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/make/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java
--- a/langtools/make/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/make/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java Thu Jul 20 09:38:13 2017 -0700
@@ -59,13 +59,14 @@
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
List options = Arrays.asList("-source", "9",
"-target", "9",
+ "-proc:only",
"--system", "none",
"--module-source-path", args[0],
"--add-modules", Arrays.stream(args)
.skip(1)
.collect(Collectors.joining(",")));
List jlObjectList = Arrays.asList("java.lang.Object");
- JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, d -> {}, options, jlObjectList, null);
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, options, jlObjectList, null);
task.enter();
Elements elements = task.getElements();
List todo = new LinkedList<>();
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java Thu Jul 20 09:38:13 2017 -0700
@@ -340,6 +340,8 @@
JavaFileObject classfile = c.classfile;
if (classfile != null) {
JavaFileObject previousClassFile = currentClassFile;
+ Symbol prevOwner = c.owner;
+ Name prevName = c.fullname;
try {
if (reader.filling) {
Assert.error("Filling " + classfile.toUri() + " during " + previousClassFile);
@@ -360,6 +362,21 @@
+ classfile.toUri());
}
}
+ } catch (BadClassFile cf) {
+ //the symbol may be partially initialized, purge it:
+ c.owner = prevOwner;
+ c.members_field.getSymbols(sym -> sym.kind == TYP).forEach(sym -> {
+ ClassSymbol csym = (ClassSymbol) sym;
+ csym.owner = sym.packge();
+ csym.owner.members().enter(sym);
+ csym.fullname = sym.flatName();
+ csym.name = Convert.shortName(sym.flatName());
+ csym.reset();
+ });
+ c.fullname = prevName;
+ c.name = Convert.shortName(prevName);
+ c.reset();
+ throw cf;
} finally {
currentClassFile = previousClassFile;
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Jul 20 09:38:13 2017 -0700
@@ -290,8 +290,7 @@
*/
public Type completionError(DiagnosticPosition pos, CompletionFailure ex) {
log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, pos, Errors.CantAccess(ex.sym, ex.getDetailValue()));
- if (ex instanceof ClassFinder.BadClassFile) throw new Abort();
- else return syms.errType;
+ return syms.errType;
}
/** Report an error that wrong type tag was found.
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Thu Jul 20 09:38:13 2017 -0700
@@ -94,10 +94,8 @@
import com.sun.tools.javac.tree.JCTree.JCUses;
import com.sun.tools.javac.tree.JCTree.Tag;
import com.sun.tools.javac.tree.TreeInfo;
-import com.sun.tools.javac.util.Abort;
import com.sun.tools.javac.util.Assert;
import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.JCDiagnostic;
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
import com.sun.tools.javac.util.List;
import com.sun.tools.javac.util.ListBuffer;
@@ -105,7 +103,6 @@
import com.sun.tools.javac.util.Name;
import com.sun.tools.javac.util.Names;
import com.sun.tools.javac.util.Options;
-import com.sun.tools.javac.util.Position;
import static com.sun.tools.javac.code.Flags.ABSTRACT;
import static com.sun.tools.javac.code.Flags.ENUM;
@@ -266,8 +263,7 @@
msym.complete();
}
} catch (CompletionFailure ex) {
- log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, Position.NOPOS, Errors.CantAccess(ex.sym, ex.getDetailValue()));
- if (ex instanceof ClassFinder.BadClassFile) throw new Abort();
+ chk.completionError(null, ex);
} finally {
depth--;
}
@@ -1220,10 +1216,6 @@
Predicate observablePred = sym ->
(observable == null) ? (moduleFinder.findModule(sym).kind != ERR) : observable.contains(sym);
Predicate systemModulePred = sym -> (sym.flags() & Flags.SYSTEM_MODULE) != 0;
- Predicate noIncubatorPred = sym -> {
- sym.complete();
- return !sym.resolutionFlags.contains(ModuleResolutionFlags.DO_NOT_RESOLVE_BY_DEFAULT);
- };
Set enabledRoot = new LinkedHashSet<>();
if (rootModules.contains(syms.unnamedModule)) {
@@ -1241,9 +1233,18 @@
jdkModulePred = sym -> true;
}
+ Predicate noIncubatorPred = sym -> {
+ sym.complete();
+ return !sym.resolutionFlags.contains(ModuleResolutionFlags.DO_NOT_RESOLVE_BY_DEFAULT);
+ };
+
for (ModuleSymbol sym : new HashSet<>(syms.getAllModules())) {
- if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym) && noIncubatorPred.test(sym)) {
- enabledRoot.add(sym);
+ try {
+ if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym) && noIncubatorPred.test(sym)) {
+ enabledRoot.add(sym);
+ }
+ } catch (CompletionFailure ex) {
+ chk.completionError(null, ex);
}
}
}
@@ -1341,32 +1342,36 @@
result.add(syms.java_base);
while (primaryTodo.nonEmpty() || secondaryTodo.nonEmpty()) {
- ModuleSymbol current;
- boolean isPrimaryTodo;
- if (primaryTodo.nonEmpty()) {
- current = primaryTodo.head;
- primaryTodo = primaryTodo.tail;
- isPrimaryTodo = true;
- } else {
- current = secondaryTodo.head;
- secondaryTodo = secondaryTodo.tail;
- isPrimaryTodo = false;
- }
- if (observable != null && !observable.contains(current))
- continue;
- if (!result.add(current) || current == syms.unnamedModule || ((current.flags_field & Flags.AUTOMATIC_MODULE) != 0))
- continue;
- current.complete();
- if (current.kind == ERR && (isPrimaryTodo || base.contains(current)) && warnedMissing.add(current)) {
- log.error(Errors.ModuleNotFound(current));
- }
- for (RequiresDirective rd : current.requires) {
- if (rd.module == syms.java_base) continue;
- if ((rd.isTransitive() && isPrimaryTodo) || rootModules.contains(current)) {
- primaryTodo = primaryTodo.prepend(rd.module);
+ try {
+ ModuleSymbol current;
+ boolean isPrimaryTodo;
+ if (primaryTodo.nonEmpty()) {
+ current = primaryTodo.head;
+ primaryTodo = primaryTodo.tail;
+ isPrimaryTodo = true;
} else {
- secondaryTodo = secondaryTodo.prepend(rd.module);
+ current = secondaryTodo.head;
+ secondaryTodo = secondaryTodo.tail;
+ isPrimaryTodo = false;
}
+ if (observable != null && !observable.contains(current))
+ continue;
+ if (!result.add(current) || current == syms.unnamedModule || ((current.flags_field & Flags.AUTOMATIC_MODULE) != 0))
+ continue;
+ current.complete();
+ if (current.kind == ERR && (isPrimaryTodo || base.contains(current)) && warnedMissing.add(current)) {
+ log.error(Errors.ModuleNotFound(current));
+ }
+ for (RequiresDirective rd : current.requires) {
+ if (rd.module == syms.java_base) continue;
+ if ((rd.isTransitive() && isPrimaryTodo) || rootModules.contains(current)) {
+ primaryTodo = primaryTodo.prepend(rd.module);
+ } else {
+ secondaryTodo = secondaryTodo.prepend(rd.module);
+ }
+ }
+ } catch (CompletionFailure ex) {
+ chk.completionError(null, ex);
}
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java Thu Jul 20 09:38:13 2017 -0700
@@ -1425,7 +1425,7 @@
ClassSymbol c = readClassSymbol(nextChar());
NameAndType nt = readNameAndType(nextChar());
- if (c.members_field == null)
+ if (c.members_field == null || c.kind != TYP)
throw badClassFile("bad.enclosing.class", self, c);
MethodSymbol m = findMethod(nt, c.members_field, self.flags());
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java Thu Jul 20 09:38:13 2017 -0700
@@ -400,8 +400,6 @@
} catch (CompletionFailure ex) {
// inlined Check.completionError as it is not initialized yet
log.error(Errors.CantAccess(ex.sym, ex.getDetailValue()));
- if (ex instanceof ClassFinder.BadClassFile)
- throw new Abort();
}
source = Source.instance(context);
attr = Attr.instance(context);
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Thu Jul 20 09:38:13 2017 -0700
@@ -2243,8 +2243,20 @@
}
}
- JCNewArray na = toP(F.at(newpos).NewArray(elemtype, dims.toList(), null));
+ List elems = null;
+ int errpos = token.pos;
+
+ if (token.kind == LBRACE) {
+ elems = arrayInitializerElements(newpos, elemtype);
+ }
+
+ JCNewArray na = toP(F.at(newpos).NewArray(elemtype, dims.toList(), elems));
na.dimAnnotations = dimAnnotations.toList();
+
+ if (elems != null) {
+ return syntaxError(errpos, List.of(na), "illegal.array.creation.both.dimension.and.initialization");
+ }
+
return na;
}
}
@@ -2270,6 +2282,11 @@
/** ArrayInitializer = "{" [VariableInitializer {"," VariableInitializer}] [","] "}"
*/
JCExpression arrayInitializer(int newpos, JCExpression t) {
+ List elems = arrayInitializerElements(newpos, t);
+ return toP(F.at(newpos).NewArray(t, List.nil(), elems));
+ }
+
+ List arrayInitializerElements(int newpos, JCExpression t) {
accept(LBRACE);
ListBuffer elems = new ListBuffer<>();
if (token.kind == COMMA) {
@@ -2283,7 +2300,7 @@
}
}
accept(RBRACE);
- return toP(F.at(newpos).NewArray(t, List.nil(), elems.toList()));
+ return elems.toList();
}
/** VariableInitializer = ArrayInitializer | Expression
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Thu Jul 20 09:38:13 2017 -0700
@@ -165,6 +165,9 @@
compiler.err.array.dimension.missing=\
array dimension missing
+compiler.err.illegal.array.creation.both.dimension.and.initialization=\
+ array creation with both dimension expression and initialization is illegal
+
# 0: type
compiler.err.array.req.but.found=\
array required, but {0} found
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractIndexWriter.java
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractIndexWriter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractIndexWriter.java Thu Jul 20 09:38:13 2017 -0700
@@ -455,7 +455,7 @@
* @throws DocFileIOException if there is a problem creating the search index file
*/
protected void createSearchIndexFile(DocPath searchIndexFile, DocPath searchIndexZip,
- DocPath searchIndexJS, List searchIndex, String varName) throws DocFileIOException {
+ DocPath searchIndexJS, Collection searchIndex, String varName) throws DocFileIOException {
if (!searchIndex.isEmpty()) {
StringBuilder searchVar = new StringBuilder("[");
boolean first = true;
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java Thu Jul 20 09:38:13 2017 -0700
@@ -532,7 +532,7 @@
tdDesc.addStyle(HtmlStyle.colLast);
writer.addSummaryLinkComment(this, member, firstSentenceTags, tdDesc);
tr.addContent(tdDesc);
- if (utils.isMethod(member) && !utils.isAnnotationType(member)) {
+ if (utils.isMethod(member) && !utils.isAnnotationType(member) && !utils.isProperty(name(member))) {
int methodType = utils.isStatic(member) ? MethodTypes.STATIC.tableTabs().value() :
MethodTypes.INSTANCE.tableTabs().value();
if (utils.isInterface(member.getEnclosingElement())) {
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlConfiguration.java Thu Jul 20 09:38:13 2017 -0700
@@ -224,7 +224,7 @@
protected List packageSearchIndex = new ArrayList<>();
- protected List tagSearchIndex = new ArrayList<>();
+ protected SortedSet tagSearchIndex = new TreeSet<>(makeSearchTagComparator());
protected List typeSearchIndex = new ArrayList<>();
@@ -348,6 +348,16 @@
return htmlTag.allowTag(this.htmlVersion);
}
+ public Comparator makeSearchTagComparator() {
+ return (SearchIndexItem sii1, SearchIndexItem sii2) -> {
+ int result = (sii1.getLabel()).compareTo(sii2.getLabel());
+ if (result == 0) {
+ result = (sii1.getHolder()).compareTo(sii2.getHolder());
+ }
+ return result;
+ };
+ }
+
/**
* Decide the page which will appear first in the right-hand frame. It will
* be "overview-summary.html" if "-overview" option is used or no
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SplitIndexWriter.java Thu Jul 20 09:38:13 2017 -0700
@@ -107,12 +107,16 @@
Set keys = new TreeSet<>(indexbuilder.getIndexMap().keySet());
keys.addAll(configuration.tagSearchIndexKeys);
ListIterator li = new ArrayList<>(keys).listIterator();
+ int prev;
+ int next;
while (li.hasNext()) {
+ prev = (li.hasPrevious()) ? li.previousIndex() + 1 : -1;
Object ch = li.next();
+ next = (li.hasNext()) ? li.nextIndex() + 1 : -1;
DocPath filename = DocPaths.indexN(li.nextIndex());
SplitIndexWriter indexgen = new SplitIndexWriter(configuration,
path.resolve(filename),
- indexbuilder, keys, li.previousIndex(), li.nextIndex());
+ indexbuilder, keys, prev, next);
indexgen.generateIndexFile((Character) ch);
if (!li.hasNext()) {
indexgen.createSearchIndexFiles();
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css Thu Jul 20 09:38:13 2017 -0700
@@ -434,21 +434,21 @@
}
.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
-.requiresSummary caption a:link, .packagesSummary caption a:link, providesSummary caption a:link,
+.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link,
.usesSummary caption a:link,
.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
-.requiresSummary caption a:hover, .packagesSummary caption a:hover, providesSummary caption a:hover,
+.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover,
.usesSummary caption a:hover,
.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
-.requiresSummary caption a:active, .packagesSummary caption a:active, providesSummary caption a:active,
+.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active,
.usesSummary caption a:active,
.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
-.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited
-.requiresSummary caption a:visited, .packagesSummary caption a:visited, providesSummary caption a:visited,
+.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited,
+.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited,
.usesSummary caption a:visited {
- color:#FFFFFF;
+ color:#1f389c;
}
.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span,
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Thu Jul 20 09:38:13 2017 -0700
@@ -38,7 +38,9 @@
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
+import java.util.MissingResourceException;
import java.util.Objects;
+import java.util.ResourceBundle;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -177,6 +179,16 @@
usage("main.Xusage", OptionKind.EXTENDED, "main.Xusage.foot");
}
+ @Override
+ void version() {
+ messager.notice("javadoc.version", messager.programName, version("release"));
+ }
+
+ @Override
+ void fullVersion() {
+ messager.notice("javadoc.fullversion", messager.programName, version("full"));
+ }
+
private void usage(String headerKey, OptionKind kind, String footerKey) {
messager.notice(headerKey);
showToolOptions(kind);
@@ -193,6 +205,24 @@
messager.notice(footerKey);
}
+ private static final String versionRBName = "jdk.javadoc.internal.tool.resources.version";
+ private static ResourceBundle versionRB;
+
+ private static String version(String key) {
+ if (versionRB == null) {
+ try {
+ versionRB = ResourceBundle.getBundle(versionRBName);
+ } catch (MissingResourceException e) {
+ return Log.getLocalizedString("version.not.available");
+ }
+ }
+ try {
+ return versionRB.getString(key);
+ } catch (MissingResourceException e) {
+ return Log.getLocalizedString("version.not.available");
+ }
+ }
+
void showToolOptions(OptionKind kind) {
Comparator comp = new Comparator() {
final Collator collator = Collator.getInstance(Locale.US);
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java Thu Jul 20 09:38:13 2017 -0700
@@ -359,6 +359,20 @@
public void process(Helper helper) {
throw new AssertionError("the -J flag should be caught by the launcher.");
}
+ },
+
+ VERSION("--version", STANDARD) {
+ @Override
+ public void process(Helper helper) throws OptionException {
+ throw new OptionException(OK, helper::version);
+ }
+ },
+
+ FULLVERSION("--full-version", HIDDEN) {
+ @Override
+ public void process(Helper helper) throws OptionException {
+ throw new OptionException(OK, helper::fullVersion);
+ }
};
public final String primaryName;
@@ -456,6 +470,9 @@
abstract void usage();
abstract void Xusage();
+ abstract void version();
+ abstract void fullVersion();
+
abstract String getLocalizedMessage(String msg, Object... args);
abstract OptionHelper getOptionHelper();
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties Thu Jul 20 09:38:13 2017 -0700
@@ -200,6 +200,9 @@
main.opt.quiet.desc=\
Do not display status messages
+main.opt.version.desc=\
+ Print version information
+
main.opt.J.arg=\
main.opt.J.desc=\
@@ -306,3 +309,5 @@
javadoc.warning.msg={0}: warning - {1}
javadoc.note.msg = {1}
javadoc.note.pos.msg= {0}: {1}
+javadoc.version={0} {1}
+javadoc.fullversion={0} full version "{1}"
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testIndexFiles/TestIndexFiles.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testIndexFiles/TestIndexFiles.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8170825
+ * @summary Perform tests on index files generated by javadoc.
+ * @author bpatel
+ * @library ../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build JavadocTester
+ * @run main TestIndexFiles
+ */
+
+public class TestIndexFiles extends JavadocTester {
+
+ public static void main(String... args) throws Exception {
+ TestIndexFiles tester = new TestIndexFiles();
+ tester.runTests();
+ }
+
+ @Test
+ void testIndexFiles() {
+ javadoc("-d", "out", "-splitindex", "-Xdoclint:none", "-sourcepath", testSrc,
+ "-use", "pkg");
+ checkExit(Exit.OK);
+ checkIndexFiles(true);
+ }
+
+ void checkIndexFiles(boolean found) {
+ checkOutput("index-files/index-1.html", found,
+ "Prev Letter\n"
+ + "Next Letter");
+ checkOutput("index-files/index-5.html", found,
+ "Prev Letter\n"
+ + "Next Letter");
+ checkOutput("index-files/index-1.html", !found,
+ "Prev Letter\n"
+ + "Next Letter");
+ checkOutput("index-files/index-5.html", !found,
+ "Prev Letter\n"
+ + "Next Letter");
+ }
+}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testIndexFiles/pkg/ClassForIndexFilesTest.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testIndexFiles/pkg/ClassForIndexFilesTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package pkg;
+
+public class ClassForIndexFilesTest {
+
+ /**
+ * Test field.
+ */
+ public int field1;
+
+ /**
+ * Test method.
+ */
+ public void testMethod() {
+ }
+
+ /**
+ * Another test method.
+ */
+ public void anotherTestMethod() {
+ }
+
+}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testIndexFiles/pkg/package-info.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testIndexFiles/pkg/package-info.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * Test pkg used for testing index files.
+ */
+package pkg;
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java
--- a/langtools/test/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java Thu Jul 20 09:38:13 2017 -0700
@@ -24,7 +24,7 @@
/*
* @test
* @bug 7112427 8012295 8025633 8026567 8061305 8081854 8150130 8162363
- * 8167967 8172528 8175200 8178830
+ * 8167967 8172528 8175200 8178830 8182257
* @summary Test of the JavaFX doclet features.
* @author jvalenta
* @library ../lib
@@ -137,7 +137,10 @@
"Property Summary\n"
+ "\n"
+ "Properties ",
- "");
+ "\n"
+ + "C.BooleanProperty | \n",
+ " \n"
+ + "C.DoubleProperty | \n");
checkOutput("pkg1/C.html", false,
"A()",
@@ -147,7 +150,11 @@
+ "Instance Methods"
+ " "
+ "Concrete Methods "
- + "");
+ + "",
+ " \n"
+ + "C.BooleanProperty | \n",
+ " \n"
+ + "C.DoubleProperty | \n");
checkOutput("index-all.html", true,
"Gets the value of the property paused. ",
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testModules/TestModules.java
--- a/langtools/test/jdk/javadoc/doclet/testModules/TestModules.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testModules/TestModules.java Thu Jul 20 09:38:13 2017 -0700
@@ -25,7 +25,7 @@
* @test
* @bug 8154119 8154262 8156077 8157987 8154261 8154817 8135291 8155995 8162363
* 8168766 8168688 8162674 8160196 8175799 8174974 8176778 8177562 8175218 8175823 8166306
- * 8178043
+ * 8178043 8181622
* @summary Test modules support in javadoc.
* @author bpatel
* @library ../lib
@@ -394,7 +394,7 @@
+ "\n"
+ "\n"
+ "\n"
- + "This is a test description for the moduleA module. Search "
+ + " This is a test description for the moduleA module with a Search "
+ "phrase search phrase. ");
checkOutput("moduleB-summary.html", found,
"\n"
@@ -454,7 +454,7 @@
+ " \n"
+ "\n"
+ "\n"
- + " This is a test description for the moduleA module. Search "
+ + " This is a test description for the moduleA module with a Search "
+ "phrase search phrase. ");
checkOutput("moduleB-summary.html", found,
" \n"
@@ -755,7 +755,8 @@
+ "transitive | \n"
+ "moduleA | \n"
+ "\n"
- + " This is a test description for the moduleA module. \n"
+ + "This is a test description for the moduleA module with a Search "
+ + "phrase search phrase. \n"
+ " | \n"
+ " \n"
+ "\n"
@@ -839,7 +840,8 @@
"\n"
+ "- moduleA - module moduleA
\n"
+ "- \n"
- + "
This is a test description for the moduleA module. \n"
+ + "This is a test description for the moduleA module with a Search "
+ + "phrase search phrase. \n"
+ " \n"
+ "- moduleB - module moduleB
\n"
+ "- \n"
@@ -854,13 +856,21 @@
+ "search_word - Search tag in moduleB\n"
+ "
-
\n"
+ " ");
+ checkOutput("index-all.html", false,
+ ""
+ + "search phrase - Search tag in moduleA\n"
+ + "with description\n"
+ + ""
+ + "search phrase - Search tag in moduleA\n"
+ + "with description");
}
void checkModuleModeCommon() {
checkOutput("overview-summary.html", true,
"moduleA | \n"
+ "\n"
- + " This is a test description for the moduleA module. \n"
+ + "This is a test description for the moduleA module with a Search "
+ + "phrase search phrase. \n"
+ " | ",
"moduleB | \n"
+ "\n"
@@ -868,7 +878,7 @@
+ " | ",
"moduletags | \n"
+ "\n"
- + "This is a test description for the moduleA module. \n"
+ + " \n"
@@ -896,7 +906,8 @@
" transitive static | \n"
+ " moduleA | \n"
+ " \n"
- + " This is a test description for the moduleA module. \n"
+ + "This is a test description for the moduleA module with a Search "
+ + "phrase search phrase. \n"
+ " | ",
" \n"
+ "Requires \n"
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testModules/moduleA/module-info.java
--- a/langtools/test/jdk/javadoc/doclet/testModules/moduleA/module-info.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testModules/moduleA/module-info.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
*/
/**
- * This is a test description for the moduleA module. Search phrase {@index "search phrase" with description}.
+ * This is a test description for the moduleA module with a Search phrase {@index "search phrase" with description}.
*
* @deprecated This module is deprecated.
*/
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testModules/moduletags/module-info.java
--- a/langtools/test/jdk/javadoc/doclet/testModules/moduletags/module-info.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testModules/moduletags/module-info.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
*/
/**
- * This is a test description for the moduleA module.
+ * This is a test description for the moduletags module.
* Type Link: {@link testpkgmdltags.TestClassInModuleTags}.
* Member Link: {@link testpkgmdltags.TestClassInModuleTags#testMethod(String)}.
* Package Link: {@link testpkgmdltags}.
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testSearch/TestSearch.java
--- a/langtools/test/jdk/javadoc/doclet/testSearch/TestSearch.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testSearch/TestSearch.java Thu Jul 20 09:38:13 2017 -0700
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881
+ * @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881 8181622
* @summary Test the search feature of javadoc.
* @author bpatel
* @library ../lib
@@ -65,6 +65,7 @@
checkInvalidUsageIndexTag();
checkSearchOutput(true);
checkSingleIndex(true);
+ checkSingleIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -86,6 +87,7 @@
checkDocLintErrors();
checkSearchOutput(true);
checkSingleIndex(true);
+ checkSingleIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -127,6 +129,7 @@
checkExit(Exit.OK);
checkSearchOutput(true);
checkSingleIndex(true);
+ checkSingleIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -210,6 +213,7 @@
checkInvalidUsageIndexTag();
checkSearchOutput(true);
checkSplitIndex();
+ checkSplitIndexSearchTagDuplication();
checkJqueryAndImageFiles(true);
checkSearchJS();
checkFiles(true,
@@ -498,4 +502,34 @@
+ " }\n"
+ " });");
}
+
+ void checkSingleIndexSearchTagDuplication() {
+ // Test for search tags duplication in index file.
+ checkOutput("index-all.html", true,
+ ""
+ + "SearchTagDeprecatedMethod - Search tag in pkg2.TestError\n"
+ + "with description");
+ checkOutput("index-all.html", false,
+ ""
+ + "SearchTagDeprecatedMethod - Search tag in pkg2.TestError\n"
+ + "with description\n"
+ + ""
+ + "SearchTagDeprecatedMethod - Search tag in pkg2.TestError\n"
+ + "with description");
+ }
+
+ void checkSplitIndexSearchTagDuplication() {
+ // Test for search tags duplication in index file.
+ checkOutput("index-files/index-13.html", true,
+ ""
+ + "SearchTagDeprecatedMethod - Search tag in pkg2.TestError\n"
+ + "with description");
+ checkOutput("index-files/index-13.html", false,
+ ""
+ + "SearchTagDeprecatedMethod - Search tag in pkg2.TestError\n"
+ + "with description\n"
+ + ""
+ + "SearchTagDeprecatedMethod - Search tag in pkg2.TestError\n"
+ + "with description");
+ }
}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/jdk/javadoc/doclet/testVersionOption/TestVersionOption.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testVersionOption/TestVersionOption.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8177048
+ * @summary javadoc should support --version and --full-version flags
+ * @library ../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build JavadocTester TestVersionOption
+ * @run main TestVersionOption
+ */
+
+public class TestVersionOption extends JavadocTester {
+
+ public static void main(String... args) throws Exception {
+ TestVersionOption tester = new TestVersionOption();
+ tester.runTests();
+ }
+
+ @Test
+ void testFullVersionOption() {
+ javadoc("--full-version");
+ checkExit(Exit.OK);
+
+ checkOutput(Output.OUT, true, "javadoc full version \"" + System.getProperty("java.runtime.version") + "\"");
+ }
+
+
+ @Test
+ void testVersionOption() {
+ javadoc("--version");
+ checkExit(Exit.OK);
+
+ checkOutput(Output.OUT, true, "javadoc " + System.getProperty("java.version"));
+ }
+
+}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/tools/javac/ExtraneousEquals.java
--- a/langtools/test/tools/javac/ExtraneousEquals.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/ExtraneousEquals.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,6 +1,6 @@
/*
* @test /nodynamiccopyright/
- * @bug 5019614
+ * @bug 5019614 8057647
* @summary variance prototype syntax leftover
*
* @compile/fail/ref=ExtraneousEquals.out -XDrawDiagnostics ExtraneousEquals.java
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/tools/javac/ExtraneousEquals.out
--- a/langtools/test/tools/javac/ExtraneousEquals.out Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/ExtraneousEquals.out Thu Jul 20 09:38:13 2017 -0700
@@ -1,6 +1,4 @@
ExtraneousEquals.java:10:23: compiler.err.illegal.start.of.expr
ExtraneousEquals.java:10:24: compiler.err.illegal.start.of.expr
-ExtraneousEquals.java:10:25: compiler.err.expected: ';'
-ExtraneousEquals.java:10:28: compiler.err.not.stmt
-ExtraneousEquals.java:10:29: compiler.err.expected: ';'
-5 errors
+ExtraneousEquals.java:10:26: compiler.err.illegal.array.creation.both.dimension.and.initialization
+3 errors
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/tools/javac/T8003967/DetectMutableStaticFields.java
--- a/langtools/test/tools/javac/T8003967/DetectMutableStaticFields.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/T8003967/DetectMutableStaticFields.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -91,6 +91,7 @@
static {
ignore("javax/tools/ToolProvider", "instance");
+ ignore("jdk/javadoc/internal/tool/Start", "versionRB");
ignore("com/sun/tools/javah/JavahTask", "versionRB");
ignore("com/sun/tools/classfile/Dependencies$DefaultFilter", "instance");
ignore("com/sun/tools/javap/JavapTask", "versionRB");
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/tools/javac/diags/examples/IllegalArrayCreation.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/diags/examples/IllegalArrayCreation.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.err.illegal.array.creation.both.dimension.and.initialization
+
+class IllegalArrayCreation {
+ int[] foo = new int[10] { 1, 2, 3 };
+}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/tools/javac/modules/BrokenModulesTest.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/modules/BrokenModulesTest.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8182450
+ * @summary Test model behavior when a completing a broken module-info.
+ * @library /tools/lib
+ * @modules
+ * jdk.compiler/com.sun.tools.javac.api
+ * jdk.compiler/com.sun.tools.javac.code
+ * jdk.compiler/com.sun.tools.javac.main
+ * jdk.compiler/com.sun.tools.javac.processing
+ * @build toolbox.ToolBox toolbox.JavacTask toolbox.ModuleBuilder ModuleTestBase
+ * @run main BrokenModulesTest
+ */
+
+import java.nio.file.Path;
+import java.util.List;
+
+import javax.tools.JavaCompiler;
+import javax.tools.ToolProvider;
+
+import com.sun.tools.javac.api.JavacTaskImpl;
+
+public class BrokenModulesTest extends ModuleTestBase {
+
+ public static void main(String... args) throws Exception {
+ new BrokenModulesTest().runTests();
+ }
+
+ List jlObjectList = List.of("java.lang.Object");
+ JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+
+ @Test
+ public void testBrokenModuleInfoModuleSourcePath(Path base) throws Exception {
+ Path msp = base.resolve("msp");
+ Path ma = msp.resolve("ma");
+ tb.writeJavaFiles(ma,
+ "module ma { requires not.available; exports api1; }",
+ "package api1; public interface Api { }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List opts = List.of("--module-source-path", msp.toString(),
+ "--add-modules", "ma");
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, opts, jlObjectList, null);
+
+ task.enter();
+
+ task.getElements().getModuleElement("java.base");
+ }
+
+ @Test
+ public void testSystem(Path base) throws Exception {
+ Path jdkCompiler = base.resolve("jdk.compiler");
+ tb.writeJavaFiles(jdkCompiler,
+ "module jdk.compiler { requires not.available; }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List opts = List.of("--patch-module", "jdk.compiler=" + jdkCompiler.toString(),
+ "--add-modules", "jdk.compiler");
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, opts, jlObjectList, null);
+
+ task.enter();
+
+ task.getElements().getModuleElement("java.base");
+ }
+
+ @Test
+ public void testParseError(Path base) throws Exception {
+ Path msp = base.resolve("msp");
+ Path ma = msp.resolve("ma");
+ tb.writeJavaFiles(ma,
+ "broken module ma { }",
+ "package api1; public interface Api { }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List opts = List.of("--module-source-path", msp.toString(),
+ "--add-modules", "ma");
+ JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, opts, jlObjectList, null);
+
+ task.analyze();
+
+ task.getElements().getModuleElement("java.base");
+ }
+
+}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/tools/javac/modules/EdgeCases.java
--- a/langtools/test/tools/javac/modules/EdgeCases.java Mon Jul 17 09:13:49 2017 -0700
+++ b/langtools/test/tools/javac/modules/EdgeCases.java Thu Jul 20 09:38:13 2017 -0700
@@ -467,7 +467,8 @@
List expected = Arrays.asList(
"- compiler.err.cant.access: m1x.module-info, (compiler.misc.bad.class.file.header: module-info.class, (compiler.misc.module.name.mismatch: other, m1x))",
- "1 error");
+ "module-info.java:1:1: compiler.err.module.not.found: m1x",
+ "2 errors");
if (!expected.equals(log)) {
throw new AssertionError("Unexpected output: " + log);
diff -r 3e7ed3a7da38 -r d2d3c06dde93 langtools/test/tools/javac/processing/model/completionfailure/NoAbortForBadClassFile.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/completionfailure/NoAbortForBadClassFile.java Thu Jul 20 09:38:13 2017 -0700
@@ -0,0 +1,248 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8182450
+ * @summary Bad classfiles should not abort compilations
+ * @library /tools/lib
+ * @modules
+ * jdk.compiler/com.sun.tools.javac.api
+ * jdk.compiler/com.sun.tools.javac.code
+ * jdk.compiler/com.sun.tools.javac.comp
+ * jdk.compiler/com.sun.tools.javac.jvm
+ * jdk.compiler/com.sun.tools.javac.main
+ * jdk.compiler/com.sun.tools.javac.processing
+ * jdk.compiler/com.sun.tools.javac.util
+ * @build toolbox.ToolBox toolbox.JavacTask
+ * @run main NoAbortForBadClassFile
+ */
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.sun.tools.javac.api.JavacTaskImpl;
+import com.sun.tools.javac.api.JavacTool;
+import com.sun.tools.javac.code.Flags;
+import com.sun.tools.javac.code.Symbol.ClassSymbol;
+import com.sun.tools.javac.code.Symbol.CompletionFailure;
+import com.sun.tools.javac.code.Symtab;
+import com.sun.tools.javac.jvm.ClassReader;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.Context.Factory;
+import com.sun.tools.javac.util.Names;
+import com.sun.tools.javac.util.Options;
+import toolbox.Task;
+import toolbox.Task.Expect;
+
+import toolbox.TestRunner;
+import toolbox.ToolBox;
+
+public class NoAbortForBadClassFile extends TestRunner {
+
+ private ToolBox tb = new ToolBox();
+
+ public NoAbortForBadClassFile() {
+ super(System.out);
+ }
+
+ public static void main(String... args) throws Exception {
+ new NoAbortForBadClassFile().runTests(m -> new Object[] { Paths.get(m.getName()) });
+ }
+
+ @Test
+ public void testBrokenClassFile(Path base) throws Exception {
+ Path classes = base.resolve("classes");
+ Path brokenClassFile = classes.resolve("test").resolve("Broken.class");
+
+ Files.createDirectories(brokenClassFile.getParent());
+ Files.newOutputStream(brokenClassFile).close();
+
+ Path src = base.resolve("src");
+ tb.writeJavaFiles(src,
+ "package test; public class Test { private void test() { Broken b; String.unknown(); } }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ List log = new toolbox.JavacTask(tb)
+ .options("-classpath", classes.toString(),
+ "-XDrawDiagnostics")
+ .outdir(out)
+ .files(tb.findJavaFiles(src))
+ .run(Expect.FAIL)
+ .writeAll()
+ .getOutputLines(Task.OutputKind.DIRECT);
+
+ List expectedOut = Arrays.asList(
+ "Test.java:1:57: compiler.err.cant.access: test.Broken, (compiler.misc.bad.class.file.header: Broken.class, (compiler.misc.class.file.wrong.class: java.lang.AutoCloseable))",
+ "Test.java:1:73: compiler.err.cant.resolve.location.args: kindname.method, unknown, , , (compiler.misc.location: kindname.class, java.lang.String, null)",
+ "2 errors"
+ );
+
+ if (!expectedOut.equals(log))
+ throw new Exception("expected output not found: " + log);
+ }
+
+ @Test
+ public void testLoading(Path base) throws Exception {
+ Path src = base.resolve("src");
+ tb.writeJavaFiles(src,
+ "public class Test { static { new Object() {}; } public static class I { public static class II { } } }");
+ Path out = base.resolve("out");
+ tb.createDirectories(out);
+
+ new toolbox.JavacTask(tb)
+ .outdir(out)
+ .files(tb.findJavaFiles(src))
+ .run(Expect.SUCCESS)
+ .writeAll()
+ .getOutputLines(Task.OutputKind.DIRECT);
+
+ List files;
+ try (Stream dir = Files.list(out)) {
+ files = dir.collect(Collectors.toList());
+ }
+
+ List> result = new ArrayList<>();
+
+ permutations(files, Collections.emptyList(), result);
+
+ for (List order : result) {
+ for (Path missing : order) {
+ Path test = base.resolve("test");
+
+ if (Files.exists(test)) {
+ tb.cleanDirectory(test);
+ } else {
+ tb.createDirectories(test);
+ }
+
+ for (Path p : order) {
+ Files.copy(p, test.resolve(p.getFileName()));
+ }
+
+ List actual = complete(test, order, missing, true);
+
+ Files.delete(test.resolve(missing.getFileName()));
+
+ List expected = complete(test, order, missing, false);
+
+ if (!actual.equals(expected)) {
+ throw new AssertionError("Unexpected state, actual=\n" + actual + "\nexpected=\n" + expected + "\norder=" + order + "\nmissing=" + missing);
+ }
+ }
+ }
+ }
+
+ private static void permutations(List todo, List currentList, List> result) {
+ if (todo.isEmpty()) {
+ result.add(currentList);
+ return ;
+ }
+
+ for (Path p : todo) {
+ List nextTODO = new ArrayList<>(todo);
+
+ nextTODO.remove(p);
+
+ List nextList = new ArrayList<>(currentList);
+
+ nextList.add(p);
+
+ permutations(nextTODO, nextList, result);
+ }
+ }
+
+ private List complete(Path test, List order, Path missing, boolean badClassFile) {
+ Context context = new Context();
+ if (badClassFile) {
+ TestClassReader.preRegister(context);
+ }
+ JavacTool tool = JavacTool.create();
+ JavacTaskImpl task = (JavacTaskImpl) tool.getTask(null, null, null, List.of("-classpath", test.toString(), "-XDblockClass=" + flatName(missing)), null, null, context);
+ Symtab syms = Symtab.instance(context);
+ Names names = Names.instance(context);
+
+ task.getElements().getTypeElement("java.lang.Object");
+
+ if (!badClassFile) {
+ //to ensure the same paths taken in ClassFinder.completeEnclosing in case the file is missing:
+ syms.enterClass(syms.unnamedModule, names.fromString(flatName(missing)));
+ }
+
+ List result = new ArrayList<>();
+
+ for (Path toCheck : order) {
+ ClassSymbol sym = syms.enterClass(syms.unnamedModule, names.fromString(flatName(toCheck)));
+
+ try {
+ sym.complete();
+ } catch (CompletionFailure ignore) {
+ }
+
+ long flags = sym.flags_field;
+
+ flags &= ~(Flags.CLASS_SEEN | Flags.SOURCE_SEEN);
+
+ result.add("sym: " + sym.flatname + ", " + sym.owner.flatName() +
+ ", " + sym.type + ", " + sym.members_field + ", " + flags);
+ }
+
+ return result;
+ }
+
+ private String flatName(Path p) {
+ return p.getFileName().toString().replace(".class", "");
+ }
+
+ private static class TestClassReader extends ClassReader {
+ public static void preRegister(Context ctx) {
+ ctx.put(classReaderKey, (Factory) c -> new TestClassReader(ctx));
+ }
+
+ private final String block;
+
+ public TestClassReader(Context context) {
+ super(context);
+ block = Options.instance(context).get("blockClass");
+ }
+
+ @Override
+ public void readClassFile(ClassSymbol c) {
+ super.readClassFile(c);
+
+ if (c.flatname.contentEquals(block)) {
+ throw badClassFile("blocked");
+ }
+ }
+
+ }
+
+}
diff -r 3e7ed3a7da38 -r d2d3c06dde93 nashorn/.hgtags
--- a/nashorn/.hgtags Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/.hgtags Thu Jul 20 09:38:13 2017 -0700
@@ -426,3 +426,4 @@
fed3f329875710c74f3ec1a0c4714046a79af100 jdk-10+14
3c6fbdf6e785aaf18d35ce9c6684369952fd22ec jdk-9+176
aa7404e062b95f679018f25eaaf933dcf0cf3f2b jdk-9+177
+f8a0c4895b2abe64a8c55af6117ffda192e34d30 jdk-10+15
diff -r 3e7ed3a7da38 -r d2d3c06dde93 nashorn/samples/barchart_weather.js
--- a/nashorn/samples/barchart_weather.js Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/samples/barchart_weather.js Thu Jul 20 09:38:13 2017 -0700
@@ -60,7 +60,7 @@
}
// change URL for your city here!
-var url = "http://api.openweathermap.org/data/2.5/forecast?q=chennai,india&units=metric&mode=json";
+var url = "http://api.openweathermap.org/data/2.5/forecast?q=chennai,india&units=metric&mode=json&appid=9b2982987c080ae88d81f081dcb129e8";
// download JSON document and parse
var json = readTextFromURL(url);
diff -r 3e7ed3a7da38 -r d2d3c06dde93 nashorn/samples/datepick.js
--- a/nashorn/samples/datepick.js Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/samples/datepick.js Thu Jul 20 09:38:13 2017 -0700
@@ -37,6 +37,7 @@
}
load("fx:controls.js");
+var Scene = Java.type("javafx.scene.Scene");
function start(stage) {
var picker = new DatePicker();
diff -r 3e7ed3a7da38 -r d2d3c06dde93 nashorn/samples/jsonviewer.js
--- a/nashorn/samples/jsonviewer.js Mon Jul 17 09:13:49 2017 -0700
+++ b/nashorn/samples/jsonviewer.js Thu Jul 20 09:38:13 2017 -0700
@@ -103,7 +103,7 @@
return item;
}
-var DEFAULT_URL = "http://api.openweathermap.org/data/2.5/forecast/daily?q=Chennai&mode=json&units=metric&cnt=7`";
+var DEFAULT_URL = "http://api.openweathermap.org/data/2.5/forecast?q=chennai,india&units=metric&mode=json&appid=9b2982987c080ae88d81f081dcb129e8";
var url = arguments.length == 0? DEFAULT_URL : arguments[0];
var obj = JSON.parse(readTextFromURL(url));
diff -r 3e7ed3a7da38 -r d2d3c06dde93 test/lib/jdk/test/lib/Utils.java
--- a/test/lib/jdk/test/lib/Utils.java Mon Jul 17 09:13:49 2017 -0700
+++ b/test/lib/jdk/test/lib/Utils.java Thu Jul 20 09:38:13 2017 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -680,5 +680,26 @@
String.format("A mandatory property '%s' isn't set", propName));
return prop;
}
+
+ /*
+ * Run uname with specified arguments.
+ */
+ public static OutputAnalyzer uname(String... args) throws Throwable {
+ String[] cmds = new String[args.length + 1];
+ cmds[0] = "uname";
+ System.arraycopy(args, 0, cmds, 1, args.length);
+ return ProcessTools.executeCommand(cmds);
+ }
+
+ /*
+ * Returns the system distro.
+ */
+ public static String distro() {
+ try {
+ return uname("-v").asLines().get(0);
+ } catch (Throwable t) {
+ throw new RuntimeException("Failed to determine distro.", t);
+ }
+ }
}
| |