diff options
author | Sarika Sinha | 2020-05-29 07:43:02 +0000 |
---|---|---|
committer | Sarika Sinha | 2020-05-29 07:43:02 +0000 |
commit | 90ae3ae71788fb03107dcd6c2ebc39d5c3f00108 (patch) | |
tree | b1a7057ee80b3ba71983333da9f9190527866d88 | |
parent | 5e0db3247cddcefaf34a8edf09d741748bc5a073 (diff) | |
download | eclipse.jdt.core-90ae3ae71788fb03107dcd6c2ebc39d5c3f00108.tar.gz eclipse.jdt.core-90ae3ae71788fb03107dcd6c2ebc39d5c3f00108.tar.xz eclipse.jdt.core-90ae3ae71788fb03107dcd6c2ebc39d5c3f00108.zip |
Change-Id: If682b63962a71e7ea413a9408e2991f39883ad4d
-rw-r--r-- | org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java | 42 | ||||
-rw-r--r-- | org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java | 7 |
2 files changed, 49 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java index 02406b332b..4baf681369 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java @@ -885,4 +885,46 @@ public class ASTConverter14Test extends ConverterTestSetup { } } + public void testRecord007() throws CoreException { + if (!isJRE14) { + System.err.println("Test "+getName()+" requires a JRE 14"); + return; + } + String contents = "record X(int lo) {\n" + + " public int lo() {\n" + + " return this.lo;\n" + + " }\n" + + "\n" + + "}\n"; + this.workingCopy = getWorkingCopy("/Converter14/src/X.java", true/*resolve*/); + IJavaProject javaProject = this.workingCopy.getJavaProject(); + String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true); + try { + javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED); + javaProject.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE); + ASTNode node = buildAST( + contents, + this.workingCopy); + assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, node.getNodeType()); + CompilationUnit compilationUnit = (CompilationUnit) node; + assertProblemsSize(compilationUnit, 0); + node = ((AbstractTypeDeclaration)compilationUnit.types().get(0)); + assertEquals("Not a Record Declaration", ASTNode.RECORD_DECLARATION, node.getNodeType()); + RecordDeclaration record = (RecordDeclaration)node; + List<SingleVariableDeclaration> recordComponents = record.recordComponents(); + assertEquals("There should be 1 record component", 1, recordComponents.size()); + SingleVariableDeclaration recordComponent = recordComponents.get(0); + SimpleName recordComponentName = recordComponent.getName(); + assertEquals("Record component name should be lo","lo" , recordComponentName.toString()); + ITypeBinding resolveTypeBinding = recordComponentName.resolveTypeBinding(); + assertEquals("Record component type is int" , "int",resolveTypeBinding.getName() ); + IVariableBinding resolveBinding = (IVariableBinding)recordComponentName.resolveBinding(); + assertEquals("Record component binding" , true, resolveBinding.isRecordComponent()); + + + } finally { + javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old); + } + } + } diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java index 2829c51e54..df1ff90752 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java @@ -1251,6 +1251,10 @@ class DefaultBindingResolver extends BindingResolver { IMethodBinding method = getMethodBinding(referenceExpression.getMethodBinding()); if (method == null) return null; return method.getReturnType(); + } else if (node instanceof org.eclipse.jdt.internal.compiler.ast.RecordComponent) { + org.eclipse.jdt.internal.compiler.ast.RecordComponent recordComponent = (org.eclipse.jdt.internal.compiler.ast.RecordComponent) node; + org.eclipse.jdt.internal.compiler.lookup.TypeBinding recordComponentType = recordComponent.type.resolvedType; + return this.getTypeBinding(recordComponentType); } return null; } @@ -1530,6 +1534,9 @@ class DefaultBindingResolver extends BindingResolver { } else if (node instanceof org.eclipse.jdt.internal.compiler.ast.ReferenceExpression) { org.eclipse.jdt.internal.compiler.ast.ReferenceExpression referenceExpression = (org.eclipse.jdt.internal.compiler.ast.ReferenceExpression) node; return getMethodBinding(referenceExpression.getMethodBinding()); + } else if (node instanceof org.eclipse.jdt.internal.compiler.ast.RecordComponent) { + org.eclipse.jdt.internal.compiler.ast.RecordComponent recordComponent = (org.eclipse.jdt.internal.compiler.ast.RecordComponent) node; + return this.getVariableBinding(recordComponent.binding); } return null; } |