/** * Check whether the new definition will either conflict with or shadow an existing definition */ private void checkForConflictingDefinitionOrShadowing(IConflictingBindingCallback callback) { List<Conflict> conflictingDef = findAllPotentiallyConflictingDefinitions(); if (!conflictingDef.isEmpty()) callback.addConflictError(conflictingDef); conflictingDef = findAllPotentiallyConflictingUnboundSubprogramCalls(); if (!conflictingDef.isEmpty()) callback.addConflictWarning(conflictingDef); }
private void checkIfReferenceBindingWillChange( IConflictingBindingCallback callback, PhotranTokenRef ref, boolean shouldReferenceRenamedDefinition) { pm.subTask( Messages.bind( Messages.FortranResourceRefactoring_CheckingForBindingConflictsIn, PhotranVPG.lastSegmentOfFilename(ref.getFilename()))); Token reference = ref.findToken(); if (definitionToCheck != null) { ScopingNode scopeOfDefinitionToRename = reference.findScopeDeclaringOrImporting(definitionToCheck); if (scopeOfDefinitionToRename == null) return; for (String newName : newNames) { for (PhotranTokenRef existingBinding : new FakeToken(reference, newName).manuallyResolveBinding()) { ScopingNode scopeOfExistingBinding = existingBinding.findToken().getEnclosingScope(); boolean willReferenceRenamedDefinition = scopeOfExistingBinding.isParentScopeOf(scopeOfDefinitionToRename); if (shouldReferenceRenamedDefinition != willReferenceRenamedDefinition) callback.addReferenceWillChangeError(newName, reference); } } } else { if (scopeOfDefinitionToCheck == reference.getLocalScope() || scopeOfDefinitionToCheck.isParentScopeOf(reference.getLocalScope())) { for (String newName : newNames) { for (PhotranTokenRef existingBinding : new FakeToken(reference, newName).manuallyResolveBinding()) { ScopingNode scopeOfExistingBinding = existingBinding.findToken().getEnclosingScope(); boolean willReferenceRenamedDefinition = scopeOfExistingBinding.isParentScopeOf(scopeOfDefinitionToCheck); if (shouldReferenceRenamedDefinition != willReferenceRenamedDefinition) callback.addReferenceWillChangeError(newName, reference); } } } } }