Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3GlobalScopeProvider.java +28 −6 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package de.ugoe.cs.swe.scoping; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.antlr.misc.MultiMap; import org.eclipse.emf.ecore.EObject; Loading @@ -29,6 +30,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; import com.google.inject.Inject; import com.google.inject.Provider; Loading @@ -42,7 +45,8 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { // TODO: do not use this map when using the xtext eclipse editor private static final Map<Resource, IScope> staticScope = Maps.newHashMap(); private static final ListMultimap<Resource, ImportData> imports = ArrayListMultimap.create(); private static final SetMultimap<Resource, ImportData> imports = HashMultimap.create(); private static final SetMultimap<TTCN3Module, TTCN3Module> importedFrom = HashMultimap.create(); @Inject private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; Loading @@ -64,14 +68,15 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { return getImportedScope(resource, null); } // TODO: figure out why the code commented out resolves more references // but breaks checking if a variable is referenced elsewhere (checkZeroReferencedModuleDefinitions) protected IScope getImportedScope(final Resource resource, final EReference reference) { List<String> importsString = getImports(resource); List<IEObjectDescription> objects = Lists.newArrayList(); if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && staticScope.containsKey(resource)) { return staticScope.get(resource); } else { } else /*if (TTCN3StatisticsProvider.getInstance().isParsingCompleted()) */ { if (!importsString.isEmpty()) { for (Resource r : resource.getResourceSet().getResources()) { ISelectable descriptions = getAllDescriptions(r); Loading @@ -84,6 +89,12 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getTTCN3Module(), e.getEClass())) { d = EObjectDescription.create(e.getQualifiedName().getLastSegment(), e.getEObjectOrProxy()); objects.add(d); TTCN3Module importedModule = (TTCN3Module) module.getEObjectOrProxy(); if (importedFrom.containsKey(importedModule)) { importedFrom.get(importedModule).add(TTCN3StatisticsProvider.getInstance().getModule(resource)); } else { importedFrom.put(importedModule, TTCN3StatisticsProvider.getInstance().getModule(resource)); } } else if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getGroupDef(), e.getEClass())) { d = EObjectDescription.create(e.getQualifiedName().getLastSegment(), e.getEObjectOrProxy()); objects.add(d); Loading Loading @@ -143,6 +154,7 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { // add exported objects to import list if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && module != null && objects.size() > 0) { TTCN3Module importedModule = (TTCN3Module) module.getEObjectOrProxy(); ImportData m = new ImportData(importedModule.getName(), null); for (ImportData d : imports.get(resource)) { if (d.equals(m)) { Loading @@ -163,6 +175,8 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { staticScope.put(resource, scope); } return scope; // } else { // return IScope.NULLSCOPE; } } Loading Loading @@ -204,7 +218,7 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { return new MultimapBasedSelectable(allDescriptions); } public List<ImportData> importedObjects(final Resource resource) { public Set<ImportData> importedObjects(final Resource resource) { if (imports.containsKey(resource)) { return imports.get(resource); } else { Loading @@ -212,7 +226,15 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { if (imports.containsKey(resource)) { return imports.get(resource); } return Lists.newArrayList(); return Sets.newHashSet(); } } public Set<TTCN3Module> getImportingModules(TTCN3Module module) { if (importedFrom.containsKey(module)) { return importedFrom.get(module); } else { return Sets.newHashSet(); } } Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +23 −10 Original line number Diff line number Diff line Loading @@ -624,16 +624,29 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { // TODO: improve performance (hit list for resources which are often called successfully?) if (!found) { for (r : parent.resourceSet.resources) { val TTCN3Module currentBase = statistics.getModule(r) // only consider modules that are importing the current module if (statistics.isBaseModuleImported(parent, currentBase.name)) { if (currentBase.isReferenced2(target)) { val TTCN3GlobalScopeProvider scopeProvider = globalScopeProvider as TTCN3GlobalScopeProvider if (scopeProvider == null) { return true } val modulesImportingThis = scopeProvider.getImportingModules(parent); for (m : modulesImportingThis) { if (m.isReferenced2(target)) { return false } } } // for (r : parent.resourceSet.resources) { // val TTCN3Module currentBase = statistics.getModule(r) // // // only consider modules that are importing the current module // if (statistics.isBaseModuleImported(parent, currentBase.name)) { // if (currentBase.isReferenced2(target)) { // return false // } // } // } } return !found Loading Loading @@ -1048,7 +1061,7 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { val TTCN3GlobalScopeProvider scopeProvider = globalScopeProvider as TTCN3GlobalScopeProvider if (scopeProvider == null) { return } val List<ImportData> data = scopeProvider.importedObjects(module.eResource); val Set<ImportData> data = scopeProvider.importedObjects(module.eResource); for (d : data) { if (d.module == null) { Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3GlobalScopeProvider.java +28 −6 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package de.ugoe.cs.swe.scoping; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.antlr.misc.MultiMap; import org.eclipse.emf.ecore.EObject; Loading @@ -29,6 +30,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; import com.google.inject.Inject; import com.google.inject.Provider; Loading @@ -42,7 +45,8 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { // TODO: do not use this map when using the xtext eclipse editor private static final Map<Resource, IScope> staticScope = Maps.newHashMap(); private static final ListMultimap<Resource, ImportData> imports = ArrayListMultimap.create(); private static final SetMultimap<Resource, ImportData> imports = HashMultimap.create(); private static final SetMultimap<TTCN3Module, TTCN3Module> importedFrom = HashMultimap.create(); @Inject private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; Loading @@ -64,14 +68,15 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { return getImportedScope(resource, null); } // TODO: figure out why the code commented out resolves more references // but breaks checking if a variable is referenced elsewhere (checkZeroReferencedModuleDefinitions) protected IScope getImportedScope(final Resource resource, final EReference reference) { List<String> importsString = getImports(resource); List<IEObjectDescription> objects = Lists.newArrayList(); if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && staticScope.containsKey(resource)) { return staticScope.get(resource); } else { } else /*if (TTCN3StatisticsProvider.getInstance().isParsingCompleted()) */ { if (!importsString.isEmpty()) { for (Resource r : resource.getResourceSet().getResources()) { ISelectable descriptions = getAllDescriptions(r); Loading @@ -84,6 +89,12 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getTTCN3Module(), e.getEClass())) { d = EObjectDescription.create(e.getQualifiedName().getLastSegment(), e.getEObjectOrProxy()); objects.add(d); TTCN3Module importedModule = (TTCN3Module) module.getEObjectOrProxy(); if (importedFrom.containsKey(importedModule)) { importedFrom.get(importedModule).add(TTCN3StatisticsProvider.getInstance().getModule(resource)); } else { importedFrom.put(importedModule, TTCN3StatisticsProvider.getInstance().getModule(resource)); } } else if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getGroupDef(), e.getEClass())) { d = EObjectDescription.create(e.getQualifiedName().getLastSegment(), e.getEObjectOrProxy()); objects.add(d); Loading Loading @@ -143,6 +154,7 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { // add exported objects to import list if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && module != null && objects.size() > 0) { TTCN3Module importedModule = (TTCN3Module) module.getEObjectOrProxy(); ImportData m = new ImportData(importedModule.getName(), null); for (ImportData d : imports.get(resource)) { if (d.equals(m)) { Loading @@ -163,6 +175,8 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { staticScope.put(resource, scope); } return scope; // } else { // return IScope.NULLSCOPE; } } Loading Loading @@ -204,7 +218,7 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { return new MultimapBasedSelectable(allDescriptions); } public List<ImportData> importedObjects(final Resource resource) { public Set<ImportData> importedObjects(final Resource resource) { if (imports.containsKey(resource)) { return imports.get(resource); } else { Loading @@ -212,7 +226,15 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { if (imports.containsKey(resource)) { return imports.get(resource); } return Lists.newArrayList(); return Sets.newHashSet(); } } public Set<TTCN3Module> getImportingModules(TTCN3Module module) { if (importedFrom.containsKey(module)) { return importedFrom.get(module); } else { return Sets.newHashSet(); } } Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +23 −10 Original line number Diff line number Diff line Loading @@ -624,16 +624,29 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { // TODO: improve performance (hit list for resources which are often called successfully?) if (!found) { for (r : parent.resourceSet.resources) { val TTCN3Module currentBase = statistics.getModule(r) // only consider modules that are importing the current module if (statistics.isBaseModuleImported(parent, currentBase.name)) { if (currentBase.isReferenced2(target)) { val TTCN3GlobalScopeProvider scopeProvider = globalScopeProvider as TTCN3GlobalScopeProvider if (scopeProvider == null) { return true } val modulesImportingThis = scopeProvider.getImportingModules(parent); for (m : modulesImportingThis) { if (m.isReferenced2(target)) { return false } } } // for (r : parent.resourceSet.resources) { // val TTCN3Module currentBase = statistics.getModule(r) // // // only consider modules that are importing the current module // if (statistics.isBaseModuleImported(parent, currentBase.name)) { // if (currentBase.isReferenced2(target)) { // return false // } // } // } } return !found Loading Loading @@ -1048,7 +1061,7 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { val TTCN3GlobalScopeProvider scopeProvider = globalScopeProvider as TTCN3GlobalScopeProvider if (scopeProvider == null) { return } val List<ImportData> data = scopeProvider.importedObjects(module.eResource); val Set<ImportData> data = scopeProvider.importedObjects(module.eResource); for (d : data) { if (d.module == null) { Loading