Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManoj Palat2020-07-27 07:08:55 +0000
committerManoj Palat2020-07-28 05:25:45 +0000
commit48a32cdd1476a0f352acd764ab267163fc4183b1 (patch)
treeb8c80fc43539786f35dc4d225ac2e9d7c4058f41
parent88949f4bc95d11674add28c1b69c91f205de67d7 (diff)
downloadeclipse.jdt.core-48a32cdd1476a0f352acd764ab267163fc4183b1.tar.gz
eclipse.jdt.core-48a32cdd1476a0f352acd764ab267163fc4183b1.tar.xz
eclipse.jdt.core-48a32cdd1476a0f352acd764ab267163fc4183b1.zip
Bug 565561 - [15][codegen] Sealed Types - Inner Class attributes ofY20200728-0600
permits not generated Change-Id: I8997b1f15d12317abc65a1a206841f9e184fa96f
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SealedTypes15Tests.java44
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java11
2 files changed, 39 insertions, 16 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SealedTypes15Tests.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SealedTypes15Tests.java
index 36d322473f..fd68bcd908 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SealedTypes15Tests.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SealedTypes15Tests.java
@@ -1242,7 +1242,7 @@ public class SealedTypes15Tests extends AbstractRegressionTest9 {
String expectedOutput =
"PermittedSubclasses:\n" +
" #33 p1/X$Y,\n" +
- " #36 p1/X$Z\n" +
+ " #35 p1/X$Z\n" +
"}";
verifyClassFile(expectedOutput, "p1/X.class", ClassFileBytesDisassembler.SYSTEM);
}
@@ -1264,7 +1264,7 @@ public class SealedTypes15Tests extends AbstractRegressionTest9 {
String expectedOutput =
"PermittedSubclasses:\n" +
" #33 p1/X$Y,\n" +
- " #36 p1/X$Z\n" +
+ " #35 p1/X$Z\n" +
"}";
verifyClassFile(expectedOutput, "p1/X.class", ClassFileBytesDisassembler.SYSTEM);
}
@@ -1512,8 +1512,8 @@ public class SealedTypes15Tests extends AbstractRegressionTest9 {
"");
String expectedOutput =
"PermittedSubclasses:\n" +
- " #27 p1/A$Y$SubInnerY,\n" +
- " #32 p1/A$Z\n" +
+ " #24 p1/A$Y$SubInnerY,\n" +
+ " #26 p1/A$Z\n" +
"}";
verifyClassFile(expectedOutput, "p1/A$Y.class", ClassFileBytesDisassembler.SYSTEM);
expectedOutput =
@@ -1538,8 +1538,8 @@ public class SealedTypes15Tests extends AbstractRegressionTest9 {
"");
String expectedOutput =
"PermittedSubclasses:\n" +
- " #27 p1/A$SubY,\n" +
- " #29 p1/A$Z\n" +
+ " #22 p1/A$SubY,\n" +
+ " #24 p1/A$Z\n" +
"}";
verifyClassFile(expectedOutput, "p1/A$Y.class", ClassFileBytesDisassembler.SYSTEM);
expectedOutput =
@@ -1566,9 +1566,9 @@ public class SealedTypes15Tests extends AbstractRegressionTest9 {
"");
String expectedOutput =
"PermittedSubclasses:\n" +
- " #27 p1/A$Y$SubInnerY,\n" +
- " #32 p1/A$SubY,\n" +
- " #34 p1/A$Z\n";
+ " #24 p1/A$Y$SubInnerY,\n" +
+ " #26 p1/A$SubY,\n" +
+ " #28 p1/A$Z\n";
verifyClassFile(expectedOutput, "p1/A$Y.class", ClassFileBytesDisassembler.SYSTEM);
}
public void testBug564498_4() throws IOException, ClassFormatException {
@@ -1588,7 +1588,7 @@ public class SealedTypes15Tests extends AbstractRegressionTest9 {
"");
String expectedOutput =
"PermittedSubclasses:\n" +
- " #27 p1/A$Y$SubInnerY\n";
+ " #24 p1/A$Y$SubInnerY\n";
verifyClassFile(expectedOutput, "p1/A$Y.class", ClassFileBytesDisassembler.SYSTEM);
}
// Reject references of membertype without qualifier of enclosing type in permits clause
@@ -5113,4 +5113,28 @@ public class SealedTypes15Tests extends AbstractRegressionTest9 {
options
);
}
+ public void testBug565561_001() throws IOException, ClassFormatException {
+ runConformTest(
+ new String[] {
+ "X.java",
+ "public sealed class X permits Outer.Inner {\n" +
+ " public static void main(String[] args){\n"+
+ " System.out.println(0);\n" +
+ " }\n"+
+ "}\n" +
+ "class Outer{\n" +
+ " final class Inner extends X{}\n"+
+ "}",
+ },
+ "0");
+ String expectedOutput =
+ " Inner classes:\n" +
+ " [inner class info: #33 Outer$Inner, outer class info: #36 Outer\n" +
+ " inner name: #38 Inner, accessflags: 16 final]\n" +
+ "\n" +
+ "PermittedSubclasses:\n" +
+ " #33 Outer$Inner\n" +
+ "}";
+ verifyClassFile(expectedOutput, "X.class", ClassFileBytesDisassembler.SYSTEM);
+ }
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
index b5852b0483..b033c82dfd 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
@@ -433,6 +433,10 @@ public class ClassFile implements TypeConstants, TypeIds {
(this.recordBootstrapMethods != null && !this.recordBootstrapMethods.isEmpty())) {
attributesNumber += generateBootstrapMethods(this.bootstrapMethods, this.recordBootstrapMethods);
}
+ if (this.targetJDK >= ClassFileConstants.JDK15) {
+ // add record attributes
+ attributesNumber += generatePermittedTypeAttributes();
+ }
// Inner class attribute
int numberOfInnerClasses = this.innerClassesBindings == null ? 0 : this.innerClassesBindings.size();
if (numberOfInnerClasses != 0) {
@@ -472,10 +476,6 @@ public class ClassFile implements TypeConstants, TypeIds {
// add record attributes
attributesNumber += generateRecordAttributes();
}
- if (this.targetJDK >= ClassFileConstants.JDK15) {
- // add record attributes
- attributesNumber += generatePermittedTypeAttributes();
- }
// update the number of attributes
if (attributeOffset + 2 >= this.contents.length) {
resizeContents(2);
@@ -2889,8 +2889,7 @@ public class ClassFile implements TypeConstants, TypeIds {
this.contents[localContentsOffset++] = (byte) l;
for (int i = 0; i < l; i++) {
- char[] permittedTypeName = permittedTypes[i].constantPoolName();
- int permittedTypeIndex = this.constantPool.literalIndexForType(permittedTypeName);
+ int permittedTypeIndex = this.constantPool.literalIndexForType(permittedTypes[i]);
this.contents[localContentsOffset++] = (byte) (permittedTypeIndex >> 8);
this.contents[localContentsOffset++] = (byte) permittedTypeIndex;
}

Back to the top