diff --git a/com.avaloq.tools.ddk.xtext.test/src/com/avaloq/tools/ddk/xtext/XtextTestSuite.java b/com.avaloq.tools.ddk.xtext.test/src/com/avaloq/tools/ddk/xtext/XtextTestSuite.java index 2a6b079e5..b3d62132d 100644 --- a/com.avaloq.tools.ddk.xtext.test/src/com/avaloq/tools/ddk/xtext/XtextTestSuite.java +++ b/com.avaloq.tools.ddk.xtext.test/src/com/avaloq/tools/ddk/xtext/XtextTestSuite.java @@ -21,6 +21,7 @@ import com.avaloq.tools.ddk.xtext.naming.QualifiedNameSegmentTreeLookupTest; import com.avaloq.tools.ddk.xtext.resource.AbstractSelectorFragmentProviderTest; import com.avaloq.tools.ddk.xtext.resource.BugAig1084; +import com.avaloq.tools.ddk.xtext.resource.PatternAwareEObjectDescriptionLookUpTest; import com.avaloq.tools.ddk.xtext.resource.ResourceDescriptionDeltaTest; import com.avaloq.tools.ddk.xtext.util.RuntimeProjectUtilTest; @@ -40,7 +41,8 @@ QualifiedNamePatternTest.class, BugAig1084.class, RuntimeProjectUtilTest.class, - QualifiedNameSegmentTreeLookupTest.class}) + QualifiedNameSegmentTreeLookupTest.class, + PatternAwareEObjectDescriptionLookUpTest.class}) // @Format-On public class XtextTestSuite { } diff --git a/com.avaloq.tools.ddk.xtext.test/src/com/avaloq/tools/ddk/xtext/resource/PatternAwareEObjectDescriptionLookUpTest.java b/com.avaloq.tools.ddk.xtext.test/src/com/avaloq/tools/ddk/xtext/resource/PatternAwareEObjectDescriptionLookUpTest.java new file mode 100644 index 000000000..aea964432 --- /dev/null +++ b/com.avaloq.tools.ddk.xtext.test/src/com/avaloq/tools/ddk/xtext/resource/PatternAwareEObjectDescriptionLookUpTest.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2026 Avaloq Group AG 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: + * Avaloq Group AG - initial API and implementation + *******************************************************************************/ +package com.avaloq.tools.ddk.xtext.resource; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.Set; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EcoreFactory; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.xtext.naming.QualifiedName; +import org.eclipse.xtext.resource.EObjectDescription; +import org.eclipse.xtext.resource.IEObjectDescription; +import org.junit.jupiter.api.Test; + +import com.avaloq.tools.ddk.xtext.naming.QualifiedNamePattern; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; + + +@SuppressWarnings({"PMD.JUnitAssertionsShouldIncludeMessage", "nls"}) +public class PatternAwareEObjectDescriptionLookUpTest { + + private static final String FOO = "Foo"; + private static final String FOO_BAR = "FooBar"; + private static final String FOO_PREFIX = "Foo*"; + private static final String OTHER = "Other"; + + private final PatternAwareEObjectDescriptionLookUp lookUp = new PatternAwareEObjectDescriptionLookUp(List.of(// + description(FOO), description(FOO_BAR), description("foobar"), description(OTHER))); + @Test + public void testCaseSensitivePatternMatchesCandidateNames() { + assertEquals(ImmutableSet.of(FOO, FOO_BAR), names(lookUp.getExportedObjects(EcorePackage.Literals.ECLASS, QualifiedNamePattern.create(FOO_PREFIX), false))); + } + @Test + public void testCaseSensitiveExactPattern() { + assertEquals(ImmutableSet.of(OTHER), names(lookUp.getExportedObjects(EcorePackage.Literals.ECLASS, QualifiedNamePattern.create(OTHER), false))); + } + + @Test + public void testCaseInsensitivePattern() { + assertEquals(ImmutableSet.of(FOO, FOO_BAR, "foobar"), names(lookUp.getExportedObjects(EcorePackage.Literals.ECLASS, QualifiedNamePattern.create("foo*"), true))); + } + + @Test + public void testCaseSensitivePlainName() { + assertEquals(ImmutableSet.of(FOO_BAR), names(lookUp.getExportedObjects(EcorePackage.Literals.ECLASS, QualifiedName.create(FOO_BAR), false))); + } + + @Test + public void testPatternRespectsType() { + assertEquals(ImmutableSet.of(), names(lookUp.getExportedObjects(EcorePackage.Literals.EDATA_TYPE, QualifiedNamePattern.create(FOO_PREFIX), false))); + } + + private static IEObjectDescription description(final String name) { + EClass eClass = EcoreFactory.eINSTANCE.createEClass(); + eClass.setName(name); + return EObjectDescription.create(QualifiedName.create(name), eClass); + } + + private static Set names(final Iterable descriptions) { + return ImmutableSet.copyOf(Iterables.transform(descriptions, d -> d.getName().toString())); + } +} diff --git a/com.avaloq.tools.ddk.xtext/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.xtext/META-INF/MANIFEST.MF index d5acfe3e4..5e0b4d08c 100644 --- a/com.avaloq.tools.ddk.xtext/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.xtext/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: com.avaloq.tools.ddk.xtext Bundle-SymbolicName: com.avaloq.tools.ddk.xtext;singleton:=true -Bundle-Version: 17.4.1.qualifier +Bundle-Version: 17.4.2.qualifier Bundle-Vendor: Avaloq Group AG Bundle-RequiredExecutionEnvironment: JavaSE-21 Bundle-ActivationPolicy: lazy diff --git a/com.avaloq.tools.ddk.xtext/pom.xml b/com.avaloq.tools.ddk.xtext/pom.xml index 547cf3a9b..b5e1975c1 100644 --- a/com.avaloq.tools.ddk.xtext/pom.xml +++ b/com.avaloq.tools.ddk.xtext/pom.xml @@ -6,7 +6,7 @@ 18.0.1-SNAPSHOT ../ddk-parent - 17.4.1-SNAPSHOT + 17.4.2-SNAPSHOT com.avaloq.tools.ddk com.avaloq.tools.ddk.xtext eclipse-plugin diff --git a/com.avaloq.tools.ddk.xtext/src/com/avaloq/tools/ddk/xtext/resource/PatternAwareEObjectDescriptionLookUp.java b/com.avaloq.tools.ddk.xtext/src/com/avaloq/tools/ddk/xtext/resource/PatternAwareEObjectDescriptionLookUp.java index 35b57ceb5..1d7da4530 100644 --- a/com.avaloq.tools.ddk.xtext/src/com/avaloq/tools/ddk/xtext/resource/PatternAwareEObjectDescriptionLookUp.java +++ b/com.avaloq.tools.ddk.xtext/src/com/avaloq/tools/ddk/xtext/resource/PatternAwareEObjectDescriptionLookUp.java @@ -60,7 +60,7 @@ public Iterable getExportedObjects(final EClass type, final return Collections.emptyList(); } Predicate predicate = ignoreCase ? input -> EcoreUtil2.isAssignableFrom(type, input.getEClass()) - : input -> isPattern ? EcoreUtil2.isAssignableFrom(type, input.getEClass()) && ((QualifiedNamePattern) name).matches(name) + : input -> isPattern ? EcoreUtil2.isAssignableFrom(type, input.getEClass()) && ((QualifiedNamePattern) name).matches(input.getName()) : name.equals(input.getName()) && EcoreUtil2.isAssignableFrom(type, input.getEClass()); return Collections2.filter(values, predicate); }