Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbvosburgh2012-05-16 21:08:22 +0000
committerbvosburgh2012-05-16 21:08:22 +0000
commit12599f029e78f252a003118408e40b6923027834 (patch)
treeca1d3ab06560ee1105acc243b5058ae87e4e69b8
parent5538ef021e73448412fb63b9ef84781cc692b891 (diff)
downloadwebtools.dali-12599f029e78f252a003118408e40b6923027834.tar.gz
webtools.dali-12599f029e78f252a003118408e40b6923027834.tar.xz
webtools.dali-12599f029e78f252a003118408e40b6923027834.zip
[348483] prevent validation of external or binary Java queries, generators, and converters
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java19
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaPersistentType.java13
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java110
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java74
4 files changed, 142 insertions, 74 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java
index e3e4cb7428..fa76e4bccc 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/MappingTools.java
@@ -9,9 +9,12 @@
******************************************************************************/
package org.eclipse.jpt.jpa.core.internal.context;
+import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jpt.common.core.internal.resource.java.source.SourceNode;
import org.eclipse.jpt.common.core.internal.utility.JDTTools;
+import org.eclipse.jpt.common.core.resource.java.JavaResourceNode;
import org.eclipse.jpt.common.utility.internal.ArrayTools;
import org.eclipse.jpt.common.utility.internal.ClassName;
import org.eclipse.jpt.common.utility.internal.ReflectionTools;
@@ -31,6 +34,7 @@ import org.eclipse.jpt.jpa.core.context.ReferenceTable;
import org.eclipse.jpt.jpa.core.context.Relationship;
import org.eclipse.jpt.jpa.core.context.RelationshipMapping;
import org.eclipse.jpt.jpa.core.context.TypeMapping;
+import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode;
import org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0;
import org.eclipse.jpt.jpa.core.jpa2.context.CollectionMapping2_0;
import org.eclipse.jpt.jpa.core.jpa2.context.ElementCollectionMapping2_0;
@@ -467,6 +471,21 @@ public final class MappingTools {
}
}
+ /**
+ * TODO temporary hack since we don't know yet where to put
+ * any messages for types in another project (e.g. referenced by
+ * persistence.xml)
+ */
+ public static boolean nodeIsInternalSource(JavaJpaContextNode contextNode, JavaResourceNode resourceNode) {
+ IResource resource = contextNode.getResource();
+ // 'resource' will be null if the node is "external" and binary;
+ // the resource will be in a different project if the node is "external" and source;
+ // the node will be binary if it is in a JAR in the current project
+ return (resource != null) &&
+ resource.getProject().equals(contextNode.getJpaProject().getProject()) &&
+ (resourceNode instanceof SourceNode);
+ }
+
// ********** constructor **********
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaPersistentType.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaPersistentType.java
index 4455b94c73..06d0ea9fb8 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaPersistentType.java
@@ -15,11 +15,9 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
-import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jpt.common.core.internal.resource.java.source.SourceNode;
import org.eclipse.jpt.common.core.resource.java.Annotation;
import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement;
import org.eclipse.jpt.common.core.resource.java.JavaResourceAttribute;
@@ -51,6 +49,7 @@ import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;
import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;
import org.eclipse.jpt.jpa.core.context.java.JavaTypeMapping;
import org.eclipse.jpt.jpa.core.context.java.JavaTypeMappingDefinition;
+import org.eclipse.jpt.jpa.core.internal.context.MappingTools;
import org.eclipse.jpt.jpa.core.jpa2.resource.java.Access2_0Annotation;
import org.eclipse.jst.j2ee.model.internal.validation.ValidationCancelledException;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
@@ -980,15 +979,7 @@ public abstract class AbstractJavaPersistentType
if (reporter.isCancelled()) {
throw new ValidationCancelledException();
}
- // TODO temporary hack since we don't know yet where to put
- // any messages for types in another project (e.g. referenced by
- // persistence.xml)
- IFile file = this.resourceType.getFile();
- // 'file' will be null if the type is "external" and binary;
- // the file will be in a different project if the type is "external" and source;
- // the type will be binary if it is in a JAR in the current project
- if ((file != null) && file.getProject().equals(this.getJpaProject().getProject()) &&
- (this.resourceType instanceof SourceNode)) {
+ if (MappingTools.nodeIsInternalSource(this, this.resourceType)) {
// build the AST root here to pass down
this.validate(messages, reporter, this.buildASTRoot());
}
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java
index 19fa579a1c..9b0d80c313 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/persistence/AbstractPersistenceUnit.java
@@ -85,6 +85,7 @@ import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnitProperties;
import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnitTransactionType;
import org.eclipse.jpt.jpa.core.context.persistence.PersistentTypeContainer;
import org.eclipse.jpt.jpa.core.internal.JptCoreMessages;
+import org.eclipse.jpt.jpa.core.internal.context.MappingTools;
import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages;
import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages;
import org.eclipse.jpt.jpa.core.jpa2.JpaFactory2_0;
@@ -2500,18 +2501,28 @@ public abstract class AbstractPersistenceUnit
protected void validateGeneratorsWithSameName(String generatorName, ArrayList<Generator> dups, List<IMessage> messages) {
String[] parms = new String[] {generatorName};
for (Generator dup : dups) {
- messages.add(
- DefaultJpaValidationMessages.buildMessage(
- IMessage.HIGH_SEVERITY,
- JpaValidationMessages.GENERATOR_DUPLICATE_NAME,
- parms,
- dup,
- this.extractNameTextRange(dup)
- )
- );
+ if (this.generatorSupportsValidationMessages(dup)) {
+ messages.add(
+ DefaultJpaValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ JpaValidationMessages.GENERATOR_DUPLICATE_NAME,
+ parms,
+ dup,
+ this.extractNameTextRange(dup)
+ )
+ );
+ }
}
}
+ protected boolean generatorSupportsValidationMessages(Generator generator) {
+ return (generator instanceof OrmGenerator) || this.generatorSupportsValidationMessages((JavaGenerator) generator);
+ }
+
+ protected boolean generatorSupportsValidationMessages(JavaGenerator javaGenerator) {
+ return MappingTools.nodeIsInternalSource(javaGenerator, javaGenerator.getGeneratorAnnotation());
+ }
+
// TODO bjv isn't it obvious?
protected TextRange extractNameTextRange(Generator generator) {
return (generator instanceof OrmGenerator) ?
@@ -2524,7 +2535,10 @@ public abstract class AbstractPersistenceUnit
if (generator instanceof OrmGenerator) {
((OrmGenerator) generator).validate(messages, reporter);
} else {
- ((JavaGenerator) generator).validate(messages, reporter, null);
+ JavaGenerator javaGenerator = (JavaGenerator) generator;
+ if (this.generatorSupportsValidationMessages(javaGenerator)) {
+ javaGenerator.validate(messages, reporter, null);
+ }
}
}
@@ -2558,18 +2572,28 @@ public abstract class AbstractPersistenceUnit
protected void validateQueriesWithSameName(String queryName, ArrayList<Query> dups, List<IMessage> messages) {
String[] parms = new String[] {queryName};
for (Query dup : dups) {
- messages.add(
- DefaultJpaValidationMessages.buildMessage(
- IMessage.HIGH_SEVERITY,
- JpaValidationMessages.QUERY_DUPLICATE_NAME,
- parms,
- dup,
- this.extractNameTextRange(dup)
- )
- );
+ if (this.querySupportsValidationMessages(dup)) {
+ messages.add(
+ DefaultJpaValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ JpaValidationMessages.QUERY_DUPLICATE_NAME,
+ parms,
+ dup,
+ this.extractNameTextRange(dup)
+ )
+ );
+ }
}
}
+ protected boolean querySupportsValidationMessages(Query query) {
+ return (query instanceof OrmQuery) || this.querySupportsValidationMessages((JavaQuery) query);
+ }
+
+ protected boolean querySupportsValidationMessages(JavaQuery javaQuery) {
+ return MappingTools.nodeIsInternalSource(javaQuery, javaQuery.getQueryAnnotation());
+ }
+
// TODO bjv isn't it obvious?
protected TextRange extractNameTextRange(Query query) {
return (query instanceof OrmQuery) ?
@@ -2581,9 +2605,11 @@ public abstract class AbstractPersistenceUnit
protected void validate(Query query, JpaJpqlQueryHelper queryHelper, List<IMessage> messages, IReporter reporter) {
if (query instanceof OrmQuery) {
((OrmQuery) query).validate(queryHelper, messages, reporter);
- }
- else {
- ((JavaQuery) query).validate(queryHelper, messages, reporter, null);
+ } else {
+ JavaQuery javaQuery = (JavaQuery) query;
+ if (this.querySupportsValidationMessages(javaQuery)) {
+ javaQuery.validate(queryHelper, messages, reporter, null);
+ }
}
}
@@ -2593,19 +2619,7 @@ public abstract class AbstractPersistenceUnit
if (StringTools.stringIsNotEmpty(entityName)) {
ArrayList<Entity> dups = entry.getValue();
if (dups.size() > 1) {
- String[] parms = new String[] {entityName};
- for (Entity dup : dups) {
- messages.add(
- DefaultJpaValidationMessages.buildMessage(
- IMessage.HIGH_SEVERITY,
- JpaValidationMessages.ENTITY_NAME_DUPLICATED,
- parms,
- dup,
- this.extractNameTextRange(dup)
- )
- );
- }
-
+ this.validateEntitiesWithSameName(entityName, dups, messages);
}
}
}
@@ -2631,6 +2645,32 @@ public abstract class AbstractPersistenceUnit
return map;
}
+ protected void validateEntitiesWithSameName(String entityName, ArrayList<Entity> dups, List<IMessage> messages) {
+ String[] parms = new String[] {entityName};
+ for (Entity dup : dups) {
+ if (this.entitySupportsValidationMessages(dup)) {
+ messages.add(
+ DefaultJpaValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ JpaValidationMessages.ENTITY_NAME_DUPLICATED,
+ parms,
+ dup,
+ this.extractNameTextRange(dup)
+ )
+ );
+ }
+ }
+ }
+
+ protected boolean entitySupportsValidationMessages(Entity entity) {
+ return (entity instanceof OrmEntity) || this.entitySupportsValidationMessages((JavaEntity) entity);
+ }
+
+ protected boolean entitySupportsValidationMessages(JavaEntity javaEntity) {
+ return MappingTools.nodeIsInternalSource(javaEntity, javaEntity.getJavaResourceType());
+ }
+
+ // TODO bjv isn't it obvious?
protected TextRange extractNameTextRange(Entity entity) {
return (entity instanceof OrmEntity) ?
((OrmEntity) entity).getXmlTypeMapping().getNameTextRange():
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java
index 00a7723f71..66307043f2 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java
@@ -55,6 +55,7 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmQueryContainer;
import org.eclipse.jpt.jpa.core.context.persistence.MappingFileRef;
import org.eclipse.jpt.jpa.core.context.persistence.Persistence;
import org.eclipse.jpt.jpa.core.internal.JptCoreMessages;
+import org.eclipse.jpt.jpa.core.internal.context.MappingTools;
import org.eclipse.jpt.jpa.core.internal.context.persistence.AbstractPersistenceUnit;
import org.eclipse.jpt.jpa.core.internal.jpa1.context.persistence.ImpliedMappingFileRef;
import org.eclipse.jpt.jpa.core.jpa2.context.persistence.options.SharedCacheMode;
@@ -1008,15 +1009,17 @@ public class EclipseLinkPersistenceUnit
String[] parms = new String[] {converterName};
if (this.anyNodesAreInequivalent(dups)) {
for (EclipseLinkConverter dup : dups) {
- messages.add(
- DefaultEclipseLinkJpaValidationMessages.buildMessage(
- IMessage.HIGH_SEVERITY,
- EclipseLinkJpaValidationMessages.CONVERTER_DUPLICATE_NAME,
- parms,
- dup,
- this.extractNameTextRange(dup)
- )
- );
+ if (this.converterSupportsValidationMessages(dup)) {
+ messages.add(
+ DefaultEclipseLinkJpaValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ EclipseLinkJpaValidationMessages.CONVERTER_DUPLICATE_NAME,
+ parms,
+ dup,
+ this.extractNameTextRange(dup)
+ )
+ );
+ }
}
}
}
@@ -1043,6 +1046,14 @@ public class EclipseLinkPersistenceUnit
return false;
}
+ protected boolean converterSupportsValidationMessages(EclipseLinkConverter converter) {
+ return (converter instanceof OrmEclipseLinkConverter<?>) || this.converterSupportsValidationMessages((JavaEclipseLinkConverter<?>) converter);
+ }
+
+ protected boolean converterSupportsValidationMessages(JavaEclipseLinkConverter<?> javaConverter) {
+ return MappingTools.nodeIsInternalSource(javaConverter, javaConverter.getConverterAnnotation());
+ }
+
// TODO bjv isn't it obvious?
protected TextRange extractNameTextRange(EclipseLinkConverter converter) {
return (converter instanceof OrmEclipseLinkConverter<?>) ?
@@ -1055,7 +1066,10 @@ public class EclipseLinkPersistenceUnit
if (converter instanceof OrmEclipseLinkConverter<?>) {
((OrmEclipseLinkConverter<?>) converter).validate(messages, reporter);
} else {
- ((JavaEclipseLinkConverter<?>) converter).validate(messages, reporter, null);
+ JavaEclipseLinkConverter<?> javaConverter = (JavaEclipseLinkConverter<?>) converter;
+ if (this.converterSupportsValidationMessages(javaConverter)) {
+ javaConverter.validate(messages, reporter, null);
+ }
}
}
@@ -1068,15 +1082,17 @@ public class EclipseLinkPersistenceUnit
if (this.allNodesAreEquivalent(dups)) {
String[] parms = new String[] {generatorName};
for (Generator dup : dups) {
- messages.add(
- DefaultEclipseLinkJpaValidationMessages.buildMessage(
- IMessage.LOW_SEVERITY,
- EclipseLinkJpaValidationMessages.GENERATOR_EQUIVALENT,
- parms,
- dup,
- this.extractNameTextRange(dup)
- )
- );
+ if (this.generatorSupportsValidationMessages(dup)) {
+ messages.add(
+ DefaultEclipseLinkJpaValidationMessages.buildMessage(
+ IMessage.LOW_SEVERITY,
+ EclipseLinkJpaValidationMessages.GENERATOR_EQUIVALENT,
+ parms,
+ dup,
+ this.extractNameTextRange(dup)
+ )
+ );
+ }
}
} else {
super.validateGeneratorsWithSameName(generatorName, dups, messages);
@@ -1091,15 +1107,17 @@ public class EclipseLinkPersistenceUnit
if (this.allNodesAreEquivalent(dups)) {
String[] parms = new String[] {queryName};
for (Query dup : dups) {
- messages.add(
- DefaultEclipseLinkJpaValidationMessages.buildMessage(
- IMessage.LOW_SEVERITY,
- EclipseLinkJpaValidationMessages.QUERY_EQUIVALENT,
- parms,
- dup,
- this.extractNameTextRange(dup)
- )
- );
+ if (this.querySupportsValidationMessages(dup)) {
+ messages.add(
+ DefaultEclipseLinkJpaValidationMessages.buildMessage(
+ IMessage.LOW_SEVERITY,
+ EclipseLinkJpaValidationMessages.QUERY_EQUIVALENT,
+ parms,
+ dup,
+ this.extractNameTextRange(dup)
+ )
+ );
+ }
}
} else {
super.validateQueriesWithSameName(queryName, dups, messages);

Back to the top