diff options
author | Pascal Filion | 2012-10-08 20:35:32 +0000 |
---|---|---|
committer | Pascal Filion | 2012-10-08 20:35:32 +0000 |
commit | 4adff1c260d4db364d5499a893a33f54bbbf6952 (patch) | |
tree | 58e96fdf00bee9e18925d3f187a449bf61c33f67 | |
parent | 28874221faf59c89f3c62b86b34ccf9249dcf6d1 (diff) | |
download | webtools.dali-4adff1c260d4db364d5499a893a33f54bbbf6952.tar.gz webtools.dali-4adff1c260d4db364d5499a893a33f54bbbf6952.tar.xz webtools.dali-4adff1c260d4db364d5499a893a33f54bbbf6952.zip |
Made minor update to JPQL query hyperlink and turned on some code now that Hermes changes is available
3 files changed, 49 insertions, 46 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/GenericJpaJpqlHyperlinkBuilder.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/GenericJpaJpqlHyperlinkBuilder.java index 187e9e28f0..1653b74228 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/GenericJpaJpqlHyperlinkBuilder.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/GenericJpaJpqlHyperlinkBuilder.java @@ -18,6 +18,7 @@ import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.NamedQuery; import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; import org.eclipse.persistence.jpa.jpql.Resolver; +import org.eclipse.persistence.jpa.jpql.StateFieldResolver; import org.eclipse.persistence.jpa.jpql.parser.AbstractPathExpression; import org.eclipse.persistence.jpa.jpql.parser.AbstractSchemaName; import org.eclipse.persistence.jpa.jpql.parser.AbstractTraverseParentVisitor; @@ -28,6 +29,7 @@ import org.eclipse.persistence.jpa.jpql.parser.Expression; import org.eclipse.persistence.jpa.jpql.parser.QueryPosition; import org.eclipse.persistence.jpa.jpql.parser.RangeVariableDeclaration; import org.eclipse.persistence.jpa.jpql.parser.StateFieldPathExpression; +import org.eclipse.persistence.jpa.jpql.spi.IMapping; import org.eclipse.persistence.jpa.jpql.spi.IType; /** @@ -270,33 +272,33 @@ public class GenericJpaJpqlHyperlinkBuilder extends JpaJpqlHyperlinkBuilder { length++; // Now traverse the path expression after the identification variable -// for (int index = expression.hasVirtualIdentificationVariable() ? 0 : 1, count = expression.pathSize(); index < count; index++) { + for (int index = expression.hasVirtualIdentificationVariable() ? 0 : 1, count = expression.pathSize(); index < count; index++) { // Retrieve the mapping for the path at the current position -// String path = expression.getPath(index); -// Resolver childResolver = resolver.getChild(path); + String path = expression.getPath(index); + Resolver childResolver = resolver.getChild(path); -// if (childResolver == null) { -// childResolver = new StateFieldResolver(resolver, path); -// resolver.addChild(path, childResolver); -// } + if (childResolver == null) { + childResolver = new StateFieldResolver(resolver, path); + resolver.addChild(path, childResolver); + } -// IMapping mapping = childResolver.getMapping(); + IMapping mapping = childResolver.getMapping(); // Invalid path expression -// if (mapping == null) { -// break; -// } + if (mapping == null) { + break; + } // The position is within the current path -// if (position <= offset + length + path.length()) { -// addFieldHyperlinks(expression, mapping, length); -// break; -// } - -// length += path.length() + 1 /* DOT */; -// resolver = childResolver; -// } + if (position <= offset + length + path.length()) { + addFieldHyperlinks(expression, mapping, length); + break; + } + + length += path.length() + 1 /* DOT */; + resolver = childResolver; + } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/JpaJpqlHyperlinkBuilder.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/JpaJpqlHyperlinkBuilder.java index fdbe57aa2a..8c341d4e8d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/JpaJpqlHyperlinkBuilder.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/JpaJpqlHyperlinkBuilder.java @@ -16,11 +16,13 @@ package org.eclipse.jpt.jpa.ui.internal.jpql; import java.util.ArrayList; import java.util.Collection; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.ISourceReference; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.NamedQuery; +import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper; import org.eclipse.jpt.jpa.ui.internal.JptUiMessages; import org.eclipse.persistence.jpa.jpql.ExpressionTools; @@ -113,7 +115,7 @@ public abstract class JpaJpqlHyperlinkBuilder extends AbstractExpressionVisitor // 'Open Declaration' opens the declaration of the persistent type addOpenMemberDeclarationHyperlink( parentType, - memberName, + getJavaElement(parentType, memberName), region, JptUiMessages.JpaJpqlHyperlinkBuilder_OpenDeclaration ); @@ -160,17 +162,17 @@ public abstract class JpaJpqlHyperlinkBuilder extends AbstractExpressionVisitor /** * Adds the given {@link IHyperlink}. * - * @param type - * @param memberName - * @param region - * @param hyperlinkText + * @param type The {@link IType} to open if the hyperlink is chosen + * @param member The member, a child element of the type, to select + * @param region The {@link IRegion} represents the region to display the hyperlink within the JPQL query + * @param hyperlinkText The text of the {@link IHyperlink} */ protected final void addOpenMemberDeclarationHyperlink(IType type, - String memberName, + ISourceReference member, IRegion region, String hyperlinkText) { - addHyperlink(buildOpenMemberDeclarationHyperlink(type, memberName, region, hyperlinkText)); + addHyperlink(buildOpenMemberDeclarationHyperlink(type, member, region, hyperlinkText)); } /** @@ -196,7 +198,7 @@ public abstract class JpaJpqlHyperlinkBuilder extends AbstractExpressionVisitor protected final int adjustedPosition(Expression expression, int offset) { int position = ExpressionTools.repositionCursor( - expression.getRoot().toParsedText(), + expression.getRoot().toActualText(), expression.getOffset(), namedQuery.getQuery() ); @@ -238,20 +240,20 @@ public abstract class JpaJpqlHyperlinkBuilder extends AbstractExpressionVisitor * Creates a new {@link IHyperlink} that can open the editor on a member of the given {@link IType}. * * @param type The {@link IType} to open if the hyperlink is chosen - * @param memberName The name of the member, a child element of the type, to select + * @param member The member, a child element of the type, to select * @param region The {@link IRegion} represents the region to display the hyperlink within the JPQL query * @param hyperlinkText The text of the {@link IHyperlink} * @return A new {@link IHyperlink} */ protected final IHyperlink buildOpenMemberDeclarationHyperlink(IType type, - String memberName, + ISourceReference member, IRegion region, String hyperlinkText) { return new OpenMemberDeclarationHyperlink( javaProject(), type.getName(), - memberName, + member, region, hyperlinkText ); @@ -321,6 +323,13 @@ public abstract class JpaJpqlHyperlinkBuilder extends AbstractExpressionVisitor return null; } + protected final ISourceReference getJavaElement(IType parentType, String memberName) { + + Entity entity = getEntity(parentType.getName()); + JavaPersistentAttribute attribute = entity.getPersistentType().getAttributeNamed(memberName).getJavaPersistentAttribute(); + return (ISourceReference) attribute.getJavaElement(); + } + /** * Returns the model object of the JPQL query being edited. * diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/OpenMemberDeclarationHyperlink.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/OpenMemberDeclarationHyperlink.java index 6e5439afe3..83eb365b98 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/OpenMemberDeclarationHyperlink.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpql/OpenMemberDeclarationHyperlink.java @@ -16,6 +16,7 @@ package org.eclipse.jpt.jpa.ui.internal.jpql; import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.ISourceReference;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.text.IRegion;
@@ -31,25 +32,25 @@ import org.eclipse.ui.texteditor.ITextEditor; */
public class OpenMemberDeclarationHyperlink implements IHyperlink {
- private String typeName;
+ private String hyperlinkText;
private IJavaProject javaProject;
+ private ISourceReference member;
private IRegion region;
- private String hyperlinkText;
- private String memberName;
+ private String typeName;
/**
* Creates a new <code>OpenMemberDeclarationHyperlink</code>.
*/
public OpenMemberDeclarationHyperlink(IJavaProject javaProject,
String typeName,
- String memberName,
+ ISourceReference member,
IRegion region,
String hyperlinkText) {
super();
this.region = region;
this.typeName = typeName;
- this.memberName = memberName;
+ this.member = member;
this.javaProject = javaProject;
this.hyperlinkText = hyperlinkText;
}
@@ -89,18 +90,9 @@ public class OpenMemberDeclarationHyperlink implements IHyperlink { // Open the editor
IEditorPart editorPart = JavaUI.openInEditor(javaElement, true, false);
- // Now select the class name
+ // Now select the member
if (editorPart instanceof ITextEditor) {
-
- for (IJavaElement child : type.getChildren()) {
- if (memberName.equals(child.getElementName())) {
- javaElement = child;
- break;
- }
- }
-
- // TODO
- ISourceRange range = type.getNameRange();
+ ISourceRange range = member.getNameRange();
((ITextEditor) editorPart).selectAndReveal(range.getOffset(), range.getLength());
}
}
|