Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSarika Sinha2020-05-29 07:43:02 +0000
committerSarika Sinha2020-05-29 07:43:02 +0000
commit90ae3ae71788fb03107dcd6c2ebc39d5c3f00108 (patch)
treeb1a7057ee80b3ba71983333da9f9190527866d88
parent5e0db3247cddcefaf34a8edf09d741748bc5a073 (diff)
downloadeclipse.jdt.core-90ae3ae71788fb03107dcd6c2ebc39d5c3f00108.tar.gz
eclipse.jdt.core-90ae3ae71788fb03107dcd6c2ebc39d5c3f00108.tar.xz
eclipse.jdt.core-90ae3ae71788fb03107dcd6c2ebc39d5c3f00108.zip
Bug 563664 - [14] Problems in renaming record components
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter14Test.java42
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java7
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;
}

Back to the top