diff options
6 files changed, 79 insertions, 26 deletions
diff --git a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/.settings/.api_filters b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/.settings/.api_filters index 1fac06f2b..068100b55 100644 --- a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/.settings/.api_filters +++ b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/.settings/.api_filters @@ -808,4 +808,17 @@ </message_arguments> </filter> </resource> + <resource path="src/org/eclipse/viatra/query/patternlanguage/emf/validation/ClasspathValidator.java" type="org.eclipse.viatra.query.patternlanguage.emf.validation.ClasspathValidator"> + <filter comment="Internal API update" id="338792546"> + <message_arguments> + <message_argument value="org.eclipse.viatra.query.patternlanguage.emf.validation.ClasspathValidator"/> + <message_argument value="checkClassPath(Modifiers)"/> + </message_arguments> + </filter> + <filter comment="Internal API update" id="1143996420"> + <message_arguments> + <message_argument value="enableClasspathValidation(boolean)"/> + </message_arguments> + </filter> + </resource> </component> diff --git a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/ClasspathValidator.java b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/ClasspathValidator.java index aebe97200..c058ed3a8 100644 --- a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/ClasspathValidator.java +++ b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/ClasspathValidator.java @@ -10,25 +10,25 @@ *******************************************************************************/ package org.eclipse.viatra.query.patternlanguage.emf.validation; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.EPackage; import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageConfigurationConstants; import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider; import org.eclipse.viatra.query.patternlanguage.emf.vql.ClassType; -import org.eclipse.viatra.query.patternlanguage.emf.vql.ExecutionType; -import org.eclipse.viatra.query.patternlanguage.emf.vql.Modifiers; import org.eclipse.viatra.query.patternlanguage.emf.vql.PackageImport; import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternLanguagePackage; import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel; import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; -import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchEMFBackendFactory; -import org.eclipse.xtext.common.types.JvmEnumerationType; import org.eclipse.xtext.common.types.JvmGenericType; import org.eclipse.xtext.common.types.util.TypeReferences; import org.eclipse.xtext.validation.AbstractDeclarativeValidator; import org.eclipse.xtext.validation.Check; import org.eclipse.xtext.validation.CheckType; +import org.eclipse.xtext.validation.EValidatorRegistrar; import com.google.inject.Inject; import com.google.inject.name.Named; @@ -44,17 +44,34 @@ public class ClasspathValidator extends AbstractDeclarativeValidator { private TypeReferences typeReferences; @Inject private IMetamodelProvider metamodelProvider; - @Named(EMFPatternLanguageConfigurationConstants.VALIDATE_CLASSPATH_KEY) private boolean classpathValidationEnabled; + + @Inject + public void enableClasspathValidation(@Named(EMFPatternLanguageConfigurationConstants.VALIDATE_CLASSPATH_KEY) boolean classpathValidationEnabled) { + this.classpathValidationEnabled = classpathValidationEnabled; + } + + @Override + public void register(EValidatorRegistrar reg) { + // Overriding for composed validator + } + + @Override + protected List<EPackage> getEPackages() { + List<EPackage> result = new ArrayList<>(); + result.add(PatternLanguagePackage.eINSTANCE); + return result; + } + @Check public void checkClassPath(PatternModel modelFile) { if (!classpathValidationEnabled) { return; } - final JvmGenericType listType = (JvmGenericType) typeReferences.findDeclaredType(List.class, modelFile); - if (listType == null || listType.getTypeParameters().isEmpty()) { - error("Couldn't find a JDK 1.5 or higher on the project's classpath.", modelFile, + final JvmGenericType listType = (JvmGenericType) typeReferences.findDeclaredType(Stream.class, modelFile); + if (listType == null) { + error("Couldn't find a JDK 1.8 or higher on the project's classpath.", modelFile, PatternLanguagePackage.Literals.PATTERN_MODEL__PACKAGE_NAME, IssueCodes.JDK_NOT_ON_CLASSPATH); } else if (typeReferences.findDeclaredType(ViatraQueryEngine.class, modelFile) == null) { error("Couldn't find the mandatory library 'org.eclipse.viatra.query.runtime' on the project's classpath.", @@ -62,21 +79,6 @@ public class ClasspathValidator extends AbstractDeclarativeValidator { IssueCodes.IQR_NOT_ON_CLASSPATH, "org.eclipse.viatra.query.runtime"); } } - - @Check - public void checkClassPath(Modifiers modifier) { - if (!classpathValidationEnabled) { - return; - } - if (modifier.getExecution() == ExecutionType.SEARCH) { - final JvmEnumerationType lsBackendType = (JvmEnumerationType) typeReferences.findDeclaredType(LocalSearchEMFBackendFactory.class, modifier); - if (lsBackendType == null || lsBackendType.eIsProxy()) { - error("Couldn't find the mandatory library 'org.eclipse.viatra.query.runtime.localsearch' on the project's classpath.", - modifier, PatternLanguagePackage.Literals.MODIFIERS__EXECUTION, - IssueCodes.IQR_NOT_ON_CLASSPATH, "org.eclipse.viatra.query.runtime.localsearch"); - } - } - } @Check(CheckType.NORMAL) public void checkClassPath(ClassType typeDecl) { diff --git a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/EMFPatternLanguageValidator.java b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/EMFPatternLanguageValidator.java index b89672eec..5398aa55d 100644 --- a/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/EMFPatternLanguageValidator.java +++ b/query/plugins/org.eclipse.viatra.query.patternlanguage.emf/src/org/eclipse/viatra/query/patternlanguage/emf/validation/EMFPatternLanguageValidator.java @@ -110,7 +110,7 @@ import com.google.inject.Inject; * * @noreference */ -@ComposedChecks(validators = { PatternLanguageValidator.class, VariableUsageCounter.class }) +@ComposedChecks(validators = { PatternLanguageValidator.class, VariableUsageCounter.class, ClasspathValidator.class }) public class EMFPatternLanguageValidator extends AbstractEMFPatternLanguageValidator implements IIssueCallback { private String calculateIssueData(IInputKey input) { diff --git a/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/META-INF/MANIFEST.MF b/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/META-INF/MANIFEST.MF index 35bcc28f9..62caebae5 100644 --- a/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/META-INF/MANIFEST.MF +++ b/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/META-INF/MANIFEST.MF @@ -27,7 +27,8 @@ Require-Bundle: org.eclipse.viatra.query.patternlanguage.emf;bundle-version="[2. org.eclipse.xtext.testing;bundle-version="[2.12.0,3.0.0)", org.eclipse.xtext.ui.testing;bundle-version="[2.12.0,3.0.0)", org.eclipse.viatra.query.patternlanguage.emf.tests;bundle-version="[2.1.0,2.2.0)", - org.eclipse.viatra.query.runtime.rete;bundle-version="[2.1.0,2.2.0)" + org.eclipse.viatra.query.runtime.rete;bundle-version="[2.1.0,2.2.0)", + org.eclipse.jdt.launching Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ClassPath: . Import-Package: org.apache.log4j;version="1.2.15", diff --git a/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/AbstractQueryCompilerTest.xtend b/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/AbstractQueryCompilerTest.xtend index bb86efaa1..1e17d7ff4 100644 --- a/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/AbstractQueryCompilerTest.xtend +++ b/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/AbstractQueryCompilerTest.xtend @@ -21,6 +21,8 @@ import org.junit.BeforeClass import org.eclipse.core.runtime.IPath import org.eclipse.core.resources.IMarker import org.eclipse.core.resources.IResource +import java.util.function.Consumer +import org.eclipse.core.resources.IProject abstract class AbstractQueryCompilerTest extends AbstractWorkbenchTest { @@ -48,9 +50,14 @@ abstract class AbstractQueryCompilerTest extends AbstractWorkbenchTest { } protected def void testFileCreationAndBuild(String contents, int expectedIssueCount) { + testFileCreationAndBuild(contents, expectedIssueCount, []) + } + + protected def void testFileCreationAndBuild(String contents, int expectedIssueCount, Consumer<IProject> projectConfigurer) { val testFile = IResourcesSetupUtil.createFile(filePath, contents) - IResourcesSetupUtil.waitForBuild val project = testFile.project + projectConfigurer.accept(project) + IResourcesSetupUtil.waitForBuild val markers = project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE). filter[IMarker.SEVERITY_ERROR == it.attributes.get(IMarker.SEVERITY)] assertEquals( diff --git a/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/SimpleQueryGeneratorTest.xtend b/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/SimpleQueryGeneratorTest.xtend index 71d5d09f3..28cb78d1e 100644 --- a/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/SimpleQueryGeneratorTest.xtend +++ b/query/tests/org.eclipse.viatra.query.patternlanguage.emf.ui.tests/src/org/eclipse/viatra/query/patternlanguage/emf/tests/generator/SimpleQueryGeneratorTest.xtend @@ -10,9 +10,15 @@ *******************************************************************************/ package org.eclipse.viatra.query.patternlanguage.emf.tests.generator +import org.eclipse.core.resources.IncrementalProjectBuilder +import org.eclipse.core.runtime.NullProgressMonitor +import org.eclipse.jdt.core.IClasspathEntry +import org.eclipse.jdt.core.JavaCore +import org.eclipse.jdt.launching.JavaRuntime import org.junit.Rule import org.junit.Test import org.junit.rules.TestName +import org.junit.Ignore class SimpleQueryGeneratorTest extends AbstractQueryCompilerTest { @@ -38,4 +44,28 @@ class SimpleQueryGeneratorTest extends AbstractQueryCompilerTest { ''', 0) } + //TODO Fix this test + @Test + @Ignore("The test does not run correctly on the build server - theory: the Eclipse did not find Java 7 installed.") + def void oldJavaVersion() { + testFileCreationAndBuild(''' + package test + + import "http://www.eclipse.org/emf/2002/Ecore" + + pattern testPattern() { + EClass(x); + } + ''', 1, [project | + val javaProject = JavaCore.create(project) + javaProject.setRawClasspath(javaProject.rawClasspath.map[ + if (it.entryKind === IClasspathEntry.CPE_CONTAINER && it.path.toString.endsWith("JavaSE-1.8")) { + JavaCore.newContainerEntry(JavaRuntime.newJREContainerPath(JavaRuntime.getExecutionEnvironmentsManager().getEnvironment("JavaSE-1.7"))) + } else { + it + } + ], new NullProgressMonitor) + project.build(IncrementalProjectBuilder.CLEAN_BUILD, new NullProgressMonitor) + ]) + } }
\ No newline at end of file |