diff options
-rw-r--r-- | org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java | 22 | ||||
-rw-r--r-- | org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NamedMember.java | 8 |
2 files changed, 26 insertions, 4 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java index e0eb04e64a..9cf6c08efb 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2015 IBM Corporation and others. + * Copyright (c) 2000, 2017 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,7 +19,10 @@ import junit.framework.Test; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IMethod; +import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.WorkingCopyOwner; import org.eclipse.jdt.core.dom.*; @@ -1293,4 +1296,21 @@ public void testBug277204e() throws JavaModelException { "Syntax error, insert \";\" to complete ClassBodyDeclarations\n", result); } + +// Verify that the binding for a constructor is a method binding +public void testBug381503() throws CoreException, IOException { + try { + IJavaProject javaProject = createJavaProject("P", new String[] { "src" }, new String[] { "CONVERTER_JCL_LIB" }, "bin"); + IType type = javaProject.findType("java.lang.IllegalMonitorStateException"); + IMethod javaElement = type.getMethod("IllegalMonitorStateException", new String[]{}); + ASTParser parser = ASTParser.newParser(AST.JLS8); + parser.setResolveBindings(true); + parser.setProject(javaProject); + IBinding[] bindings = parser.createBindings(new IJavaElement[] { javaElement }, null); + assertEquals("Wrong number of bindings", 1, bindings.length); + assertTrue("Wrong binding kind: "+bindings[0].getClass().getName(), bindings[0] instanceof IMethodBinding); + } finally { + deleteProject("P"); + } +} } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NamedMember.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NamedMember.java index ef819dfde5..166182fa38 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NamedMember.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NamedMember.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2012 IBM Corporation and others. + * Copyright (c) 2004, 2017 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -91,8 +91,10 @@ public abstract class NamedMember extends Member { // selector key.append('.'); - String selector = method.getElementName(); - key.append(selector); + if (!method.isConstructor()) { // empty selector for ctors, cf. BindingKeyResolver.consumeMethod() + String selector = method.getElementName(); + key.append(selector); + } // type parameters if (forceOpen) { |