/******************************************************************************* * Copyright (c) 2015 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Stephan Herrmann - Contribution for Bug 403917 - [1.8] Render TYPE_USE annotations in Javadoc hover/view *******************************************************************************/ package org.eclipse.jdt.ui.tests.core; import org.eclipse.jdt.testplugin.JavaProjectHelper; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.ITypeParameter; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.IBinding; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.ui.JavaElementLabels; import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks; import junit.framework.Test; import junit.framework.TestSuite; /** * This test suite is copied and adjusted from {@link JavaElementLabelsTest} */ public class BindingLabelsTest extends AbstractBindingLabelsTest { private static final Class<BindingLabelsTest> THIS= BindingLabelsTest.class; public BindingLabelsTest(String name) { super(name); } public static Test suite() { return setUpTest(new TestSuite(THIS)); } public static Test setUpTest(Test test) { return new ProjectTestSetup(test); } public void testTypeLabelOuter() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("public class Outer {\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Outer.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("Outer")); String lab= getBindingLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED); assertEqualString(lab, "org.test.Outer"); lab= getBindingLabel(elem, JavaElementLabels.T_CONTAINER_QUALIFIED); assertEqualString(lab, "Outer"); lab= getBindingLabel(elem, JavaElementLabels.T_POST_QUALIFIED); assertLinkMatch(lab, "Outer - {{org.test}}"); /* *_ROOT_PATH is not relevant for javadoc hover/view lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH); assertEqualString(lab, "org.test.Outer - TestSetupProject/src"); lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.PREPEND_ROOT_PATH); assertEqualString(lab, "TestSetupProject/src - org.test.Outer"); */ } public void testTypeLabelInner() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Vector;\n"); buf.append("public class Outer {\n"); buf.append(" public void foo(Vector vec) {\n"); buf.append(" }\n"); buf.append(" public class Inner {\n"); buf.append(" public int inner(Vector vec) {\n"); buf.append(" }\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Outer.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("Inner")); String lab= getBindingLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED); assertEqualString(lab, "org.test.Outer.Inner"); lab= getBindingLabel(elem, JavaElementLabels.T_CONTAINER_QUALIFIED); assertEqualString(lab, "Outer.Inner"); lab= getBindingLabel(elem, JavaElementLabels.T_POST_QUALIFIED); assertLinkMatch(lab, "Inner - {{org.test.Outer}}"); /* *_ROOT_PATH is not relevant for javadoc hover/view lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH); assertEqualString(lab, "org.test.Outer.Inner - TestSetupProject/src"); lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.PREPEND_ROOT_PATH); assertEqualString(lab, "TestSetupProject/src - org.test.Outer.Inner"); */ } public void testTypeLabelLocal() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Vector;\n"); buf.append("public class Outer {\n"); buf.append(" public void foo(Vector vec) {\n"); buf.append(" public class Local {\n"); buf.append(" }\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Outer.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("Local")); String lab= getBindingLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.Outer}}.{{org.test.Outer|foo}}(...).Local"); lab= getBindingLabel(elem, JavaElementLabels.T_CONTAINER_QUALIFIED); assertLinkMatch(lab, "{{org.test|Outer}}.{{org.test.Outer|foo}}(...).Local"); lab= getBindingLabel(elem, JavaElementLabels.T_POST_QUALIFIED); assertLinkMatch(lab, "Local - {{org.test.Outer}}.{{foo}}(...)"); /* *_ROOT_PATH is not relevant for javadoc hover/view lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH); assertEqualString(lab, "org.test.Outer.foo(...).Local - TestSetupProject/src"); lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.PREPEND_ROOT_PATH); assertEqualString(lab, "TestSetupProject/src - org.test.Outer.foo(...).Local"); */ } public void testTypeParameterLabelType() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.*;\n"); buf.append("import java.io.Serializable;\n"); buf.append("public class TypeParams<Q extends ArrayList<? extends Number>, Element extends Map<String, Integer> & Serializable, NoBound> {\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("TypeParams.java", content, false, null); IType typeParams= (IType)cu.getElementAt(content.indexOf("TypeParams")); ITypeParameter[] typeParameters= typeParams.getTypeParameters(); ITypeParameter q= typeParameters[0]; ITypeParameter element= typeParameters[1]; ITypeParameter nobound= typeParameters[2]; String lab= getBindingLabel(q, 0); assertLinkMatch(lab, "Q extends {{java.util|ArrayList}}<? extends {{java.lang|Number}}>"); lab= getBindingLabel(q, JavaElementLabels.ALL_POST_QUALIFIED); assertLinkMatch(lab, "Q extends {{java.util|ArrayList}}<? extends {{java.lang|Number}}> - {{org.test.TypeParams}}"); lab= getBindingLabel(element, 0); assertLinkMatch(lab, "Element extends {{java.util|Map}}<{{java.lang|String}}, {{java.lang|Integer}}> & {{java.io|Serializable}}"); lab= getBindingLabel(element, JavaElementLabels.DEFAULT_POST_QUALIFIED); assertLinkMatch(lab, "Element extends {{java.util|Map}}<{{java.lang|String}}, {{java.lang|Integer}}> & {{java.io|Serializable}} - {{org.test.TypeParams}}"); lab= getBindingLabel(nobound, 0); assertEqualString(lab, "NoBound"); lab= getBindingLabel(nobound, JavaElementLabels.TP_POST_QUALIFIED); assertLinkMatch(lab, "NoBound - {{org.test.TypeParams}}"); /* cannot select 'E' from cu. IType al= (IType)cu.codeSelect(content.indexOf("ArrayList"), 0)[0]; ITypeParameter[] alTypeParameters= al.getTypeParameters(); ITypeParameter e= alTypeParameters[0]; lab= JavaElementLabels.getTextLabel(e, 0); assertEqualString(lab, "E"); // no " extends java.lang.Object"! */ /* lab= JavaElementLabels.getTextLabel(e, JavaElementLabels.ALL_POST_QUALIFIED); assertEqualString(lab, "E - java.util.ArrayList"); */ lab= getBindingLabel(typeParams, 0); assertEqualString(lab, "TypeParams"); lab= getBindingLabel(typeParams, JavaElementLabels.ALL_DEFAULT); assertLinkMatch(lab, "TypeParams<{{org.test.TypeParams|Q}} extends {{java.util|ArrayList}}<? extends {{java.lang|Number}}>, {{org.test.TypeParams|Element}} extends {{java.util|Map}}<{{java.lang|String}}, {{java.lang|Integer}}> & {{java.io|Serializable}}, {{org.test.TypeParams|NoBound}}>"); /* lab= JavaElementLabels.getTextLabel(typeParams, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_POST_QUALIFIED); assertEqualString(lab, "TypeParams<Q extends ArrayList<? extends Number>, Element extends Map<String, Integer> & Serializable, NoBound> - org.test"); */ } public void testTypeParameterLabelMethod() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.*;\n"); buf.append("public class X {\n"); buf.append(" <Q extends ArrayList<? extends Number>, Element extends Map<String, Integer>, NoBound> Q method(Element e, NoBound n) {\n"); buf.append(" return null;\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("X.java", content, false, null); IMethod method= (IMethod)cu.getElementAt(content.indexOf("method")); ITypeParameter[] typeParameters= method.getTypeParameters(); ITypeParameter q= typeParameters[0]; ITypeParameter element= typeParameters[1]; ITypeParameter nobound= typeParameters[2]; String lab= getBindingLabel(q, 0); assertLinkMatch(lab, "Q extends {{java.util|ArrayList}}<? extends {{java.lang|Number}}>"); lab= getBindingLabel(q, JavaElementLabels.ALL_POST_QUALIFIED); assertLinkMatch(lab, "Q extends {{java.util|ArrayList}}<? extends {{java.lang|Number}}> - {{org.test.X}}.{{org.test.X|method}}({{org.test.X.method(...)|Element}}, {{org.test.X.method(...)|NoBound}})"); lab= getBindingLabel(element, 0); assertLinkMatch(lab, "Element extends {{java.util|Map}}<{{java.lang|String}}, {{java.lang|Integer}}>"); lab= getBindingLabel(element, JavaElementLabels.DEFAULT_POST_QUALIFIED); assertLinkMatch(lab, "Element extends {{java.util|Map}}<{{java.lang|String}}, {{java.lang|Integer}}> - {{org.test.X}}.{{org.test.X|method}}(Element, {{org.test.X.method(...)|NoBound}})"); lab= getBindingLabel(nobound, 0); assertEqualString(lab, "NoBound"); lab= getBindingLabel(nobound, JavaElementLabels.TP_POST_QUALIFIED); assertLinkMatch(lab, "NoBound - {{org.test.X}}.{{org.test.X|method}}({{org.test.X.method(...)|Element}}, NoBound)"); } public void testTypeLabelAnonymous() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Vector;\n"); buf.append("public class Outer {\n"); buf.append(" public void foo(Vector vec) {\n"); buf.append(" new Object() {\n"); buf.append(" };\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Outer.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("Object")); String lab= getBindingLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.Outer}}.{{org.test.Outer|foo}}(...).new Object() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_CONTAINER_QUALIFIED); assertLinkMatch(lab, "{{org.test|Outer}}.{{org.test.Outer|foo}}(...).new Object() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_POST_QUALIFIED); assertLinkMatch(lab, "new Object() {...} - {{org.test.Outer}}.{{org.test.Outer|foo}}(...)"); /* *_ROOT_PATH is not relevant for javadoc hover/view lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH); assertEqualString(lab, "org.test.Outer.foo(...).new Object() {...} - TestSetupProject/src"); lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.PREPEND_ROOT_PATH); assertEqualString(lab, "TestSetupProject/src - org.test.Outer.foo(...).new Object() {...}"); */ } public void testTypeLabelAnonymousInAnonymous() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Vector;\n"); buf.append("import java.io.Serializable;\n"); buf.append("public class Outer {\n"); buf.append(" public void foo(Vector vec) {\n"); buf.append(" new Object() {\n"); buf.append(" public void xoo() {\n"); buf.append(" new Serializable() {\n"); buf.append(" };\n"); buf.append(" }\n"); buf.append(" };\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Outer.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("Serializable()")); String lab= getBindingLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.Outer}}.{{org.test.Outer|foo}}(...).{{org.test.Outer.foo(...)|new Object() {...}}}." + "{{org.test.Outer.foo(...).new Object() {...}|xoo}}()" + ".new Serializable() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_CONTAINER_QUALIFIED); assertLinkMatch(lab, "{{org.test|Outer}}.{{org.test.Outer|foo}}(...).{{org.test.Outer.foo(...)|new Object() {...}}}." + "{{org.test.Outer.foo(...).new Object() {...}|xoo}}().new Serializable() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_POST_QUALIFIED); assertLinkMatch(lab, "new Serializable() {...} - " + "{{org.test.Outer}}.{{org.test.Outer|foo}}(...).{{org.test.Outer.foo(...)|new Object() {...}}}." + "{{org.test.Outer.foo(...).new Object() {...}|xoo}}()"); /* *_ROOT_PATH is not relevant for javadoc hover/view lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH); assertEqualString(lab, "org.test.Outer.foo(...).new Object() {...}.xoo().new Serializable() {...} - TestSetupProject/src"); lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.PREPEND_ROOT_PATH); assertEqualString(lab, "TestSetupProject/src - org.test.Outer.foo(...).new Object() {...}.xoo().new Serializable() {...}"); */ } public void testTypeLabelAnonymousInFieldInitializer() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Vector;\n"); buf.append("public class Outer {\n"); buf.append(" Object o= new Thread() {\n"); buf.append(" };\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Outer.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("Thread")); String lab= getBindingLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.Outer}}.{{org.test.Outer|o}}.new Thread() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_CONTAINER_QUALIFIED); assertLinkMatch(lab, "{{org.test|Outer}}.{{org.test.Outer|o}}.new Thread() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_POST_QUALIFIED); assertLinkMatch(lab, "new Thread() {...} - {{org.test.Outer}}.{{o}}"); /* *_ROOT_PATH is not relevant for javadoc hover/view lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH); assertEqualString(lab, "org.test.Outer.o.new Thread() {...} - TestSetupProject/src"); lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.PREPEND_ROOT_PATH); assertEqualString(lab, "TestSetupProject/src - org.test.Outer.o.new Thread() {...}"); */ } public void testTypeLabelAnonymousInInitializer() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Vector;\n"); buf.append("public class Outer {\n"); buf.append(" static {\n"); buf.append(" new Object() {\n"); buf.append(" };\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Outer.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("Object")); String lab= getBindingLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.Outer}}.{...}.new Object() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_CONTAINER_QUALIFIED); assertLinkMatch(lab, "{{org.test|Outer}}.{...}.new Object() {...}"); lab= getBindingLabel(elem, JavaElementLabels.T_POST_QUALIFIED); assertLinkMatch(lab, "new Object() {...} - {{org.test.Outer}}.{...}"); /* *_ROOT_PATH is not relevant for javadoc hover/view lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH); assertEqualString(lab, "org.test.Outer.{...}.new Object() {...} - TestSetupProject/src"); lab= JavaElementLabels.getTextLabel(elem, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.PREPEND_ROOT_PATH); assertEqualString(lab, "TestSetupProject/src - org.test.Outer.{...}.new Object() {...}"); */ } public void testTypeLabelWildcards() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("public class Wildcards<T> {\n"); buf.append(" Wildcards<? extends Number> upper;\n"); buf.append(" Wildcards<? super Number> lower;\n"); buf.append(" Wildcards<?> wild;\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Wildcards.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("upper")); String lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.F_PRE_TYPE_SIGNATURE); assertLinkMatch(lab, "{{org.test|Wildcards}}<? extends {{java.lang|Number}}> upper"); elem= cu.getElementAt(content.indexOf("lower")); lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.F_PRE_TYPE_SIGNATURE); assertLinkMatch(lab, "{{org.test|Wildcards}}<? super {{java.lang|Number}}> lower"); elem= cu.getElementAt(content.indexOf("wild")); lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.F_PRE_TYPE_SIGNATURE); assertLinkMatch(lab, "{{org.test|Wildcards}}<?> wild"); } public void testPackageLabels() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment packDefault= sourceFolder.getPackageFragment(""); IPackageFragment packOrg= sourceFolder.createPackageFragment("org", false, null); // IPackageFragment packOrgTest= sourceFolder.createPackageFragment("org.test", false, null); IPackageFragment packOrgTestLongname= sourceFolder.createPackageFragment("org.test.longname", false, null); // to obtain an IPackageBinding go via imported types to their #package: packOrg.createCompilationUnit("T1.java", "package org;\npublic class T1 {}\n", false, null); packOrgTestLongname.createCompilationUnit("T2.java", "package org.test.longname;\npublic class T2 {}\n", false, null); StringBuffer buf= new StringBuffer(); buf.append("import org.T1;\n"); buf.append("import org.test.longname.T2;\n"); buf.append("public class Main {\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= packDefault.createCompilationUnit("Main.java", content, false, null); IJavaElement main= cu.getElementAt(content.indexOf("Main")); IJavaElement t1= cu.getElementAt(content.indexOf("T1")); IJavaElement t2= cu.getElementAt(content.indexOf("T2")); ASTParser parser= ASTParser.newParser(AST.JLS8); parser.setResolveBindings(true); parser.setProject(fJProject1); IBinding[] bindings= parser.createBindings(new IJavaElement[]{main, t1, t2}, null); String lab= JavaElementLinks.getBindingLabel(((ITypeBinding)bindings[0]).getPackage(), main.getAncestor(IJavaElement.PACKAGE_FRAGMENT), JavaElementLabels.ALL_DEFAULT, true); assertEqualString(lab, "(default package)"); lab= JavaElementLinks.getBindingLabel(((ITypeBinding)bindings[1]).getPackage(), t1.getAncestor(IJavaElement.PACKAGE_FRAGMENT), JavaElementLabels.ALL_DEFAULT, true); assertLink(lab, "org"); lab= JavaElementLinks.getBindingLabel(((ITypeBinding)bindings[2]).getPackage(), t2.getAncestor(IJavaElement.PACKAGE_FRAGMENT), JavaElementLabels.ALL_DEFAULT, true); assertLink(lab, "org.test.longname"); /* P_COMPRESSED is not relevant for hovers / javadoc view: assertExpectedLabel(packDefault, "(default package)", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrg, "org", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTestLongname, "org.test.longname", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packDefault, "(default package) - TestSetupProject/src", JavaElementLabels.P_POST_QUALIFIED); assertExpectedLabel(packOrg, "org - TestSetupProject/src", JavaElementLabels.P_POST_QUALIFIED); assertExpectedLabel(packOrgTestLongname, "org.test.longname - TestSetupProject/src", JavaElementLabels.P_POST_QUALIFIED); IPreferenceStore store= PreferenceConstants.getPreferenceStore(); store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, true); try { store.setValue(PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW, "0"); assertExpectedLabel(packDefault, "(default package)", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrg, "org", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTest, "test", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTestLongname, "longname", JavaElementLabels.P_COMPRESSED); store.setValue(PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW, "."); assertExpectedLabel(packDefault, "(default package)", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrg, "org", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTest, ".test", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTestLongname, "..longname", JavaElementLabels.P_COMPRESSED); store.setValue(PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW, "1~."); assertExpectedLabel(packDefault, "(default package)", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrg, "org", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTest, "o~.test", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTestLongname, "o~.t~.longname", JavaElementLabels.P_COMPRESSED); store.setValue(PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW, "2*."); assertExpectedLabel(packDefault, "(default package)", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrg, "org", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTest, "org.test", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTestLongname, "org.te*.longname", JavaElementLabels.P_COMPRESSED); store.setValue(PreferenceConstants.APPEARANCE_ABBREVIATE_PACKAGE_NAMES, true); assertExpectedLabel(packOrgTestLongname, "org.te*.longname", JavaElementLabels.P_COMPRESSED); store.setValue(PreferenceConstants.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW, "#com=@C\norg=@O"); assertExpectedLabel(packDefault, "(default package)", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrg, "@O", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTest, "@O.test", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTestLongname, "@O.te*.longname", JavaElementLabels.P_COMPRESSED); store.setValue(PreferenceConstants.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW, "org=@O\n\norg.test=@OT\n"); assertExpectedLabel(packDefault, "(default package)", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrg, "@O", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTest, "@OT", JavaElementLabels.P_COMPRESSED); assertExpectedLabel(packOrgTestLongname, "@OT.longname", JavaElementLabels.P_COMPRESSED); } finally { store.setToDefault(PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW); store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, false); store.setToDefault(PreferenceConstants.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW); store.setValue(PreferenceConstants.APPEARANCE_ABBREVIATE_PACKAGE_NAMES, false); } */ } public void testMethodLabelVarargsDeclaration() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("public class Varargs {\n"); buf.append(" public void foo(int i, String... varargs) {\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Varargs.java", content, false, null); IJavaElement elem= cu.getElementAt(content.indexOf("foo")); String lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT); assertLinkMatch(lab, "foo(int, {{java.lang|String}}...)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_NAMES); assertEqualString(lab, "foo(i, varargs)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_TYPES); assertLinkMatch(lab, "foo(int, {{java.lang|String}}...)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_NAMES | JavaElementLabels.M_PARAMETER_TYPES); assertLinkMatch(lab, "foo(int i, {{java.lang|String}}... varargs)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.USE_RESOLVED); assertLinkMatch(lab, "foo(int, {{java.lang|String}}...)"); } public void testMethodLabelVarargsReference0() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Arrays;\n"); buf.append("public class Varargs {\n"); buf.append(" void foo() {\n"); buf.append(" Arrays.asList();\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Varargs.java", content, false, null); IJavaElement elem= cu.codeSelect(content.indexOf("asList"), 0)[0]; String lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT); assertLinkMatch(lab, "asList({{java.util.Arrays.asList(...)|T}}...) <{{java.util.Arrays.asList(...)|T}}>"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_NAMES); assertEqualString(lab, "asList(arg0)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_TYPES); assertLinkMatch(lab, "asList({{java.util.Arrays.asList(...)|T}}...)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_NAMES | JavaElementLabels.M_PARAMETER_TYPES); assertLinkMatch(lab, "asList({{java.util.Arrays.asList(...)|T}}... arg0)"); lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.USE_RESOLVED); assertLinkMatch(lab, "asList({{java.lang|Object}}...) <{{java.lang|Object}}>"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.USE_RESOLVED); assertLinkMatch(lab, "asList({{java.lang|Object}}...)"); } public void testMethodLabelVarargsReference1() throws Exception { assertMethodLabelVarargsReference("1"); } public void testMethodLabelVarargsReference2() throws Exception { assertMethodLabelVarargsReference("1, 2"); } public void testMethodLabelVarargsReference3() throws Exception { assertMethodLabelVarargsReference("1, 2, new Integer(3)"); } private void assertMethodLabelVarargsReference(String args) throws CoreException, JavaModelException { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("import java.util.Arrays;\n"); buf.append("public class Varargs {\n"); buf.append(" void foo() {\n"); buf.append(" Arrays.asList(" + args + ");\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Varargs.java", content, false, null); IJavaElement elem= cu.codeSelect(content.indexOf("asList"), 0)[0]; String lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT); assertLinkMatch(lab, "asList({{java.util.Arrays.asList(...)|T}}...) <{{java.util.Arrays.asList(...)|T}}>"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_NAMES); assertEqualString(lab, "asList(arg0)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_TYPES); assertLinkMatch(lab, "asList({{java.util.Arrays.asList(...)|T}}...)"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_NAMES | JavaElementLabels.M_PARAMETER_TYPES); assertLinkMatch(lab, "asList({{java.util.Arrays.asList(...)|T}}... arg0)"); lab= getBindingLabel(elem, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.USE_RESOLVED); assertLinkMatch(lab, "asList({{java.lang|Integer}}...) <{{java.lang|Integer}}>"); lab= getBindingLabel(elem, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.USE_RESOLVED); assertLinkMatch(lab, "asList({{java.lang|Integer}}...)"); } public void testMethodLabelAnnotatedParameters() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("\n"); buf.append("import java.lang.annotation.Retention;\n"); buf.append("import java.lang.annotation.RetentionPolicy;\n"); buf.append("\n"); buf.append("public class Annotations {\n"); buf.append(" void foo(@Outer(a=@Ann(\"Hello world\\r\\n\\t\\\"<'#@%^&\")) String param) { }\n"); buf.append(" \n"); buf.append(" void foo2(@Ann(value=\"\", cl=Annotations.class, ints={1, 2, -19},\n"); buf.append(" ch='\\0', sh= 0x7FFF, r= @Retention(RetentionPolicy.SOURCE)) String param) { }\n"); buf.append("}\n"); buf.append("@interface Ann {\n"); buf.append(" String value();\n"); buf.append(" Class<?> cl() default Ann.class;\n"); buf.append(" int[] ints() default {1, 2};\n"); buf.append(" char ch() default 'a';\n"); buf.append(" short sh() default 1;\n"); buf.append(" Retention r() default @Retention(RetentionPolicy.CLASS);\n"); buf.append("}\n"); buf.append("@interface Outer {\n"); buf.append(" Ann a();\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Annotations.java", content, false, null); IJavaElement foo= cu.getElementAt(content.indexOf("foo")); String lab= getBindingLabel(foo, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED | JavaElementLabels.M_PARAMETER_ANNOTATIONS); assertLinkMatch(lab, "{{org.test.Annotations}}.foo(@{{Outer}}({{a}}=@{{Ann}}({{value}}=\"Hello world\\r\\n\\t\\\"<'#@%^&\")) {{String}})"); IJavaElement foo2= cu.getElementAt(content.indexOf("foo2")); lab= getBindingLabel(foo2, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED | JavaElementLabels.M_PARAMETER_ANNOTATIONS); assertLinkMatch(lab, "{{org.test.Annotations}}.foo2(@{{Ann}}({{value}}=\"\", {{cl}}={{Annotations}}.class, {{ints}}={1, 2, -19}, {{ch}}='\\u0000', {{sh}}=32767, {{r}}=@{{Retention}}({{value}}={{RetentionPolicy}}.{{SOURCE}})) {{String}})"); } // disabled, because we cannot retrieve a binding for the selected element: local variable inside instance initializer public void testLocalClassInInitializer() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("public class LambdaTests {\n"); buf.append(" {\n"); buf.append(" class Local implements Function<Integer, String> {\n"); buf.append(" @Override\n"); buf.append(" public String apply(Integer t) {\n"); buf.append(" return t.toString();\n"); buf.append(" }\n"); buf.append(" }\n"); buf.append("\n"); buf.append(" Local toStringL = new Local();\n"); buf.append(" System.out.println(toStringL.apply(123));\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("LambdaTests.java", content, false, null); IJavaElement foo= cu.getElementAt(content.indexOf("Local implements")); String lab= getBindingLabel(foo, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.LambdaTests}}.{...}.Local"); IJavaElement foo2= cu.codeSelect(content.indexOf("toStringL"), 9)[0]; lab= getBindingLabel(foo2, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_POST_QUALIFIED | JavaElementLabels.F_PRE_TYPE_SIGNATURE); assertLinkMatch(lab, "{{org.test.LambdaTests.{...}|Local}} toStringL - {{org}}.{{test}}.{{LambdaTests}}.{...}"); // can't select the constructor, only the type (label computation works fine once we find the binding) // IJavaElement ctor= cu.codeSelect(content.indexOf("Local()"), 0)[0]; // lab= getBindingLabel(ctor, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED); // assertLinkMatch(lab, "{{org.test.LambdaTests}}.{...}.{{org.test.LambdaTests.{...}.|Local}}.Local()"); } public void testLocalClassInStaticInitializer() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("public class LambdaTests {\n"); buf.append(" static {\n"); buf.append(" class Local implements Function<Integer, String> {\n"); buf.append(" @Override\n"); buf.append(" public String apply(Integer t) {\n"); buf.append(" return t.toString();\n"); buf.append(" }\n"); buf.append(" }\n"); buf.append("\n"); buf.append(" Local toStringL = new Local();\n"); buf.append(" System.out.println(toStringL.apply(123));\n"); buf.append(" }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("LambdaTests.java", content, false, null); IJavaElement foo= cu.getElementAt(content.indexOf("Local implements")); String lab= getBindingLabel(foo, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.LambdaTests}}.{...}.Local"); IJavaElement foo2= cu.codeSelect(content.indexOf("toStringL"), 9)[0]; lab= getBindingLabel(foo2, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_POST_QUALIFIED | JavaElementLabels.F_PRE_TYPE_SIGNATURE); assertLinkMatch(lab, "{{org.test.LambdaTests.{...}|Local}} toStringL - {{org}}.{{test}}.{{LambdaTests}}.{...}"); } public void testRecursiveType() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("public interface TypeTest {\n"); buf.append(" public <V extends Comparable<? super V>> boolean compare(V t);\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("TypeTest.java", content, false, null); IJavaElement compare= cu.getElementAt(content.indexOf("compare")); String lab= getBindingLabel(compare, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED); assertLinkMatch(lab, "{{org.test.TypeTest}}.compare({{org.test.TypeTest.compare(...)|V}}) <{{org.test.TypeTest.compare(...)|V}} extends {{java.lang|Comparable}}<? super {{org.test.TypeTest.compare(...)|V}}>>"); IJavaElement v= cu.codeSelect(content.indexOf("V t"), 0)[0]; lab= getBindingLabel(v, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED); assertLinkMatch(lab, "V extends {{java.lang|Comparable}}<? super V>"); lab= getBindingLabel(v, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_POST_QUALIFIED); assertLinkMatch(lab, "V extends {{java.lang|Comparable}}<? super V> - {{org.test.TypeTest}}.{{org.test.TypeTest|compare}}(V)"); } public void testMultipleTypeVariables() throws Exception { IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); IPackageFragment pack1= sourceFolder.createPackageFragment("org.test", false, null); StringBuffer buf= new StringBuffer(); buf.append("package org.test;\n"); buf.append("class Two<B extends Number, A extends B> { }\n"); buf.append("public class Three<E extends Number> {\n"); buf.append(" <F extends E> void foo() { }\n"); buf.append("}\n"); String content= buf.toString(); ICompilationUnit cu= pack1.createCompilationUnit("Three.java", content, false, null); IJavaElement two= cu.getElementAt(content.indexOf("Two")); String lab= getBindingLabel(two, JavaElementLabels.ALL_DEFAULT |JavaElementLabels.ALL_FULLY_QUALIFIED); assertLinkMatch(lab, "org.test.Two<{{org.test.Two|B}} extends {{java.lang|Number}}, {{org.test.Two|A}} extends {{org.test.Two|B}}>"); IJavaElement foo= cu.getElementAt(content.indexOf("foo")); lab= getBindingLabel(foo, JavaElementLabels.ALL_FULLY_QUALIFIED | JavaElementLabels.T_TYPE_PARAMETERS | JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_PRE_TYPE_PARAMETERS); assertLinkMatch(lab, "<{{org.test.Three.foo(...)|F}} extends {{org.test.Three|E}}> {{org.test.Three}}.foo()"); } }